散列函数之双重散列算法解决冲突问题

1. 问题

问题同《简单散列函数算法》,这个例子并不是特别恰当,当在于简单,数字小,方便验证,方便理解,特别是计算概率的部分。

设有10个非负整数,用不多于20个的储存单元来存放,如何存放这10个数,使得搜索其中的某一个数时,在储存单元中查找的次数最少?

问题类似于,有10个带号码的球,放到编号为{0, 1, 2, …, 19}共20个盒子中,每个盒子最多放一个,问如何放,使能够用最少的次数打开盒子,知道任一个球所在的盒子编号?

2. 分析

散列函数之单散列算法解决冲突问题》中,我们提到用单散列算法来解决冲突,比简单散列算法冲突的比率有所降低,但18%的冲突率,对于实际应用来说还是略偏高,《初等数论及其应用》中,说明是从另一个角度来说明该冲突率高的原因。

设 h0(k) ≡ k (mod m), k = 球号, m = 盒子数量

hj(k) ≡ h0(k) + j,0<= j < m,  hj(k) 表示发生 j 次冲突后,球所放入的盒子编号

∴ hj+1(k) ≡ h0(k) + (j + 1) ≡ hj(k) + 1

∴ 只要有一个hi(

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值