开放定址法

首先,先介绍一个新的参数 :装填因子(load factor)λ=散列表中元素的个数/散列表的大小。

表的平均长度为λ,则不成功的查找需要的时间为λ,而成功的查找需要1+λ/2。

之后再对分离链接法的缺点进行梳理总结。

一、该方法需要语言支持指针。

二、由于指针的存在,对指针所指向的空间的分配地址需要时间。

 

因此,出现了一种仅由数组实现的方法:开放地址法。此方法即在冲突发生时,通过函数hi(X)=(Hash(X)+F(i))mod TableSize将新插入的元素的放到一个新的空位上。可以看到与之前的Hash(X) mod TableSize相比较,多出的一项时与hi(X)有关的F(i),这表明即是是对同一个X,i不同,所对于的F(i)也会发生变化。进一步,其表明了F(i)函数可能不会一次性解决冲突,而是需要多次计算来找到一个空位。

之后,F(i)的函数形式值得我们去思考。我们该如何设计这个函数,从而使得尝试的次数尽可能较少,进而减少运行的时间。

 

一、线性探测法。即F(i)=i。 

   这种方法即在发生冲突时,将存放新元素的位置向下一个位置移动,若再次发生冲突,则再次移动。

函数形式为:hi(X)=(Hash(X)+i)mod TableSize;

可以考虑到,在i<TableSize的情况下,原函数等价于hi(X)=Hash(X) mod TableSize +i ;即对于计算的地点,向下移动i个位置。

这种方法带来的缺点也是显而易见的。若插入的元素之间容易发生冲突,则

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值