现有数据序列{4371,1323,6173,4199,4344,9679,1989}和散列函数h(x)=x mode 10。
(1)请画出用分离链接法表示的散列表(5分)
(2)请画出用平方探测法f(i)=i*i表示的散列表(5分)
(3)请计算前两题中散列表的装载因子和查找成功的平均查找长度ASL(5分)
(1)分离链接法
0 | |||
1 | 4371 | ||
2 | |||
3 | 1323 | 6173 | |
4 | 4344 | ||
5 | |||
6 | |||
7 | |||
8 | |||
9 | 4199 | 9679 | 1989 |
将现有的数据序列{4371,1323,6173,4199,4344,9679,1989}依次代入到散列函数h(x)=x mode 10中,得到相应的结果
(2)平方探测法
empty table | after 4371 | after 1323 | after 6173 | after 4199 | after 4344 | after9679 | after1989 | |
0 | 9679 | 9679 | ||||||
1 | 4371 | 4371 | 4371 | 4371 | 4371 | 4371 | 4371 | |
2 | ||||||||
3 | 1323 | 1323 | 1323 | 1323 | 1323 | 1323 | ||
4 | 6173 | 6173 | 6173 | 6173 | 6173 | |||
5 | 4344 | 4344 | 4344 | |||||
6 | ||||||||
7 | ||||||||
8 | 1989 | |||||||
9 | 4199 | 4199 | 4199 | 4199 |
首先,对第一位的4371代入到散列函数中进行计算,得到结果为1,放入到1位置中
第二位1323,得到结果为3,放到3位置中
第三位6173,得到结果为3,与1323发生了冲突,那么i=0不符合,将i=1代入,i*i=1,得到结果为4,放到4位置中
第四位4199,得到结果为9,放到9位置中
第五位4344,得到结果为4,与6173发生了冲突,那么i=0不符合,将i=1代入,i*1=1,得到结果为5,放到5位置中
第六位9679,得到结果为9,与4199发生了冲突,那么i=0不符合,将i=1代入,i*i=1,得到结果为0,放到0位置中
第七位1989,得到结果为9,与4199发生了冲突,那么i=0不符合,将i=1代入,i*i=1,得到结果为0,与9679发生了冲突,说明i=0不符合,将i=2代入,i*i=4,得到结果为3,与1323发生了冲突,说明i=2不符合,将i=3代入,i*i=9,得到结果为8,放到8位置中
(3)ASL
装载因子很显然是0.7,7/10=0.7
首先,我们来看分离链接法中的ASL应该怎么计算,查找成功的ASL说明就是要能够找到的次数,那么很显然,在分离链接法中有4个数据只需要查找一次,分别是4371、1323、4344、4199,有2个数据要查找两次,分别是6173、9679,还有1个数据需要查找三次,是1989
得到查找成功的ASL=(4*1+2*2+1*3)/7=11/7
其次,是平方探测法中的ASL
由平方探测法可得,4371、1323、4199只需要查找一次,6173、4344、9679需要查找两次,1989需要查找3次
最后得到查找成功的ASL=(1*3+2*3+3*1)/7=12/7