算法导论 练习11.4-4

假设采用双重散列来解决冲突,即所用的散列函数为 h(k, i) = (h_{1}(k) + ih_{2}(k))mod (m)。试证明:如果对某个关键字k,m和 h_{2}(k) 有最大公约数 d \geq 1 ,则在对关键字k的一次不成功查找中,要返回槽 h_{1}(k) 之前,要查散列表中第(1/d)1/d的元素。于是,当d=1时,m与 h_{2}(k) 互素,查找操作可能要检查整个散列表。(提示:见第31章)

英文版:

Suppose that we use double hashing to resolve collisions - that is, we use the hash function h(k, i) = (h_{1}(k) + ih_{2}(k))mod (m).Show that if m and h_{2}(k) have greatest common divisor d \geq 1 for some key k, then an unsuccessful search for key k examines (1/d)th of the hash table before returning to slot h_{1}(k).Thus, when d = 1, so that m and h_{2}(k) are relatively prime, the search may examine the entire hash table.(Hint: See Chapter 31.)

题本身没太大难度,写在这里主要是原中文版的关于(1/d)th的翻译有点令人费解,已进行修正

首先m与h_{2}(k)互素时,(h_{1}(k) + ih_{2}(k))mod (m)在连续的m步中能够遍历0, 1, ... m-1

若不能则存在 i < m,使得 h_{1}(k)\equiv (h_{1}(k) + ih_{2}(k))mod(m), 可推出 m|ih_{2}(k) ,结合m与h_{2}(k)互素,进一步推出  m|i,但i < m,上一步明显无法成立,于是原命题得证(原题后半部分)

拓展一下,d>1时,上述 m与h_{2}(k) 均乘以d作为新的 m和h_{2}(k),但此时仍仅能按原0, d, ... d(m-1)进行遍历(以d为步长),可知原题前半部分成立(感觉自己写的跟屎一样。。。)

 

 

 

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值