设哈希表的地址范围为0~17,哈希函数为:H(key)=key。用线性探测法处理冲突,输入关键字序列:(10,24,32,17,31,30,46,47,40,63,49),构造哈希表,试回答下列问题: ① 画出哈希表的示意图; ② 若查找关键字63,需要依次与哪些关键字进行比较? ③ 若查找关键字60,需要依次与哪些关键字比较? ④ 假定每个关键字的查找概率相等,求查找成功时的平均查找长度。
时间: 2023-11-14 19:07:02 浏览: 473
输入一组关键字,并建立哈希表的算法(用链地址法来处理冲突)
5星 · 资源好评率100%
好的,我来回答你的问题:
① 画出哈希表的示意图:
| 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 |
|---|---|---|---|---|---|---|---|---|---|----|----|----|----|----|----|----|----|
| | | | | | | | | | | 10 | | | | | 24 | 17 | 31 |
| 30| 32| | | | | | | 40| | | | | | 46 | 47 | | |
| | | 63| | 49| | | | | | | | | | | | | |
其中,横向的行表示哈希表的地址范围,纵向的列表示哈希表中存储的关键字。
② 若查找关键字63,需要依次与哪些关键字进行比较?
首先,根据哈希函数 H(key)=key % 18,可以计算出关键字63的哈希地址为 H(63)= 63 % 18 = 9。在哈希表中,第9个位置存储的是空的,因此需要继续往后查找。依次比较的关键字为:10,24,32,17,31,30,46,47,40,63。
③ 若查找关键字60,需要依次与哪些关键字比较?
同样地,根据哈希函数 H(key)=key % 18,可以计算出关键字60的哈希地址为 H(60)= 60 % 18 = 6。在哈希表中,第6个位置存储的是空的,因此需要继续往后查找。依次比较的关键字为:32,17,31,30,46,47,40,63,10,24。
④ 假定每个关键字的查找概率相等,求查找成功时的平均查找长度。
设哈希表的长度为m,关键字的个数为n,则哈希表的装载因子为α = n / m。
由于使用的是线性探测法,当发生冲突时,需要依次查找下一个空闲位置,因此平均查找长度为:
ASL = (1/α) * ln(1/(1-α)) ≈ 5.55
因此,当查找成功时,平均需要比较5.55个关键字。
阅读全文