设关键字序列为{15,7,22,18,3,11,26,16,24,29},哈希表表长为13,哈希函数为 H(key)=keymod13,用线性探测法处理冲突,请回答以下问题:(1)按照关键字的给定次序,构造哈希表;(2)计算查找关键字22,26,29时的比较次数;(3)计算查找成功情况下,哈希表的平均查找长度(ASL)。
时间: 2024-02-03 13:01:57 浏览: 68
好的,我来回答你的问题。
(1)按照关键字的给定次序,构造哈希表如下所示:
```
哈希地址 关键字
2 15
7 7
9 22
5 18
3 3
4 11
0 26
8 16
11 24
1 29
6 -
10 -
12 -
```
其中,哈希地址是通过哈希函数 H(key)=key mod 13 计算得到的。
为了处理冲突,我们采用线性探测法。如果计算出的哈希地址已经被占用,就依次往后查找,直到找到一个空的位置为止。
在这个例子中,7、9、11、5、3、4、0、8、1分别对应关键字15、7、22、18、3、11、26、16、24。最后,6、10、12三个哈希地址没有被使用。
(2)查找关键字22、26、29时的比较次数分别为2、1、1。具体地:
- 查找关键字22时,计算出哈希地址为9,发现该位置存储的关键字为22,比较了1次就找到了;
- 查找关键字26时,计算出哈希地址为0,发现该位置存储的关键字为26,比较了1次就找到了;
- 查找关键字29时,计算出哈希地址为1,发现该位置存储的关键字为29,比较了1次就找到了。
(3)查找成功时的平均查找长度(ASL)是指查找成功时所需的比较次数的平均值。在这个例子中,关键字序列中共有10个关键字,其中6个哈希地址被占用,所以查找成功的概率为6/10。
因为采用的是线性探测法,所以平均查找长度(ASL)可以用以下公式计算:
ASL = (1/查找成功的概率) * (1/2 * (1 + 1/(1-占用哈希地址的比例)))
带入相应的值进行计算,得到:
ASL = (1/(6/10)) * (1/2 * (1 + 1/(1-6/13))) ≈ 1.92
所以,查找成功时的平均查找长度为1.92。
阅读全文