算法导论11.1-4

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

 

 

 

转载于:https://www.cnblogs.com/daniagger/archive/2012/01/20/2328301.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值