算法导论11.1-4

来源:互联网 发布:英国大学排名知乎 编辑:程序博客网 时间:2024/05/17 05:07


Q:我们希望通过利用在一个非常大的数组上直接寻址的方式来实现字典。开始时,该数组中可能包含废料,但要对整个数组进行初始化是不实际的,因为该组的规模太大。请给出在大数组上实现直接寻址字典的方案。每个存储的对象占用O(1)空间;操作SEARCH、INSERT和DELETE的时间为O(1);对数据结构初始化的时间为O(1)。

A:增加两个动态数组,S和S',类似于栈,初始化时都为空,当某个关键字变成有效时,压入数组,其最大大小为实际存储在字典中的关键字数目。记直接寻址表为T,当某个关键字k变有效时,T[k]里存储S和S'的索引i,即T[K]=i;S[i]里存储那个有效的关键字k,即S[i]=k;S'[i]里存储指向卫星数据的指针。

下面是各个操作:

初始化:TOP[S]=TOP[S']=0

 

SEARCH(k):

if(T[k]>=1&&T[k]<=TOP[S]&&S[T[k]]==k)

return true

 

INSERT(k,x)

TOP[S]=TOP[S]+1

TOP[S']=TOP[S']+1

T[k]=TOP[S]

S[T[k]]=k

S'[T[k]]指向x

 

DELETE(k)

S[T[k]]=S[TOP[S]]

S'[T[k]]=S'[TOP[S']]

TOP[S]=TOP[S]-1

TOP[S']=TOP[S']-1

T[k]=0

原创粉丝点击