选取哈希函数H(k)=(3k) MOD 11。用开放定址法处理冲突,di=i((7k)MOD 10 +1)(i=1,2,3,…)。题目如下:

H1(30)=3是怎么算出来的??不要告诉我是默认加1,你看看下面几行?
所以,请解释一下?谢谢!

原理: Hi=(H(KEY)+Di) mod m,i=1,2,3... ... m是表长,这里是11

以30为例子:
H0=H(30)=2 和上面的重复,需要重新分配。
d1=1*((7*k) MOD 10 +1)=1*((7*30) MOD 10 +1 )=1*(210 MOD10 +1)=1*(0+1)=1
带入上式得出H1=(H(KEY)+d1) MOD 11=(2+1) MOD 11=3. 不冲突!

以67为例子
H0=H(67)=3 冲突,重新分配
d1=1*((7*k) MOD 10 +1)=1*((7*67) MOD 10 +1)=1*10=10
带入上式,求H1=(H(KEY)+d1) MOD 11=(3+10)MOD11=2 再次冲突,需要重新分配
d2=2*((7*k) MOD 10 +1)=2*((7*67)mod 10 +1)=20
带入H2=(H(KEY)+d2) MOD 11=(3+20) MOD 11=1

以01为例子
H0=H(01)=3 冲突,重新分配
d1=1*((7*k) MOD 10 +1)=1*((7*1) mod 10 +1)=8
H1=(H(KEY)+d1) MOD 11=(3+8) mod 11=0 冲突,需要重新分配;
d2=2*((7*k) MOD 10 +1)=2*((7*1) mod 10 +1)=16
H2=(H(KEY)+d2) MOD 11=(3+16) mod 11=8冲突,需要重新分配;
d3=3*((7*k) MOD 10 +1)=3*((7*1) MOD 10 +1)=24
H3=(H(KEY)+d3) MOD 11=(3+24)MOD11=5冲突,需要重新分配;
d4=4*((7*k) MOD 10 +1)=4*((7*1) MOD 10 +1)=32
H4=(H(KEY)+d4) MOD 11=(3+32)MOD11=2冲突,需要重新分配;
d5=5*((7*k) MOD 10 +1)=5*((7*1) MOD 10 +1)=40
H5=(H(KEY)+d5) MOD 11=(3+40) MOD 11=10
后面构造的哈希表跟答案是一致的,然后,平均查找长度进行了几次解决冲突,可以理解为i+1的值.
如果觉得写的好,请点个攒!!!哈哈哈
温馨提示:答案为网友推荐,仅供参考
第1个回答  2015-06-14
H(30)=2冲突,然后就算di=1*(7*30)MOD10+1=1
{1+H(30)}MOD11=3追问

{1+H(30)}MOD11=3
这一步 从题目中哪里得知可以这样?

第2个回答  2015-05-24
加QQ我教你追问

QQ那

第3个回答  2015-06-14
开放地址法:
为产生冲突的的地址H(key)求得一个地址序列:
H0,H1,H2,H3,。。。。Hs l<=s<=m-l
其中H0=H(key)
Hi=(H(key)+di)MOD m,
i=1,2,3,4,5...s
di为增量序列
m为哈希表表长。
di有三种取法:
(1)线性探测再散列
di = c×i=1,2,3,4,......m-1
最简单的情况是c=1,本题也是采用这种方法的,这种比较普遍采用求di
(2)平方探测再散列(二次探测再散列)
di=1^2,-(1^2),2^2,-(2^2).......k^2,-(k^2)
(3)随机探测再散列
di是一组伪随机数列或者di=i×H2(key)
由此可见此题
H(30)=2与H(41)=2冲突,所以紧接着H1(30)=(H(30)+di)MOD11
di=1,
所以最后H1(30)=3本回答被提问者采纳
相似回答