首页 > 试题广场 >

假设我们有一个基于数组的表A[0...N-1],并且我们想要

[问答题]
假设我们有一个基于数组的表A[0...N-1],并且我们想要删除所有相同的元素。lastPosition 初始值为N-1,但该值随着相同元素被删除而变得越来越小。考虑下图中的伪码程序段。过程Delete删除位置j上的元素并使表破坏。
/* 1*/    for (i=0; i<LastPosition; i++)
           {
/* 2*/         j = i + 1;
/* 3*/         while(j < LastPosition)
/* 4*/               if (A [i] == A [j])
/* 5*/                      Delete(j);
                       else
/* 6*/                      j++;
            }
a. 解释该过程是如何进行工作的
b. 利用一般的表操作重写这个过程
c. 如用标准的数组实现,则这个过程的运行时间是多少?
d. 给出用链表实现的运行时间是多少?
e. 给出一个算法以O(NlogN)时间解决该问题。
f. 证明:如果只使用比较,那么解决该问题的任何算法都需要次比较。
g. 证明:如果我们允许除比较之外的其他操作,并且这些关键字都是实数,那么我们不用元素间的比较就可以解决该问题。

这道题你会答吗?花几分钟告诉大家答案吧!