设有一组关键字{29,01,13,15,56,20,87,27,69,9,10,74},散列函数为:H(key)=key 00000000% 17,采用线性测方法解决冲突。试在0到18的散列地址空间中对该关键字序列构造散列表,并计算成功查找的平均查找度。手写过程在0到18的散列地址空间中
时间: 2023-06-20 18:08:17 浏览: 57
首先,根据散列函数,可以得到每个关键字对应的散列地址:
H(29) = 12
H(01) = 1
H(13) = 13
H(15) = 15
H(56) = 8
H(20) = 3
H(87) = 4
H(27) = 10
H(69) = 4 (冲突)
H(9) = 9
H(10) = 10 (冲突)
H(74) = 9 (冲突)
由于发生了冲突,需要采用线性探测法解决。具体流程如下:
1. 将 29 存储在地址 12 处。
2. 将 01 存储在地址 1 处。
3. 将 13 存储在地址 13 处。
4. 将 15 存储在地址 15 处。
5. 将 56 存储在地址 8 处。
6. 将 20 存储在地址 3 处。
7. 将 87 存储在地址 4 处。
8. 将 27 存储在地址 10 处。
9. 由于 69 的散列地址为 4,已经有数据存储在该地址处,因此需要继续探测下一个地址。下一个地址为 5,也已经有数据存储,继续向下探测。直到找到空闲地址 6,将 69 存储在该地址处。
10. 由于 9 的散列地址为 9,直接存储在该地址处。
11. 由于 10 的散列地址为 10,已经有数据存储在该地址处,因此需要继续向下探测。下一个地址为 11,也已经有数据存储,继续向下探测。直到找到空闲地址 0,将 10 存储在该地址处。
12. 由于 74 的散列地址为 9,已经有数据存储在该地址处,因此需要继续向下探测。下一个地址为 10,也已经有数据存储,继续向下探测。下一个地址为 11,也已经有数据存储,继续向下探测。下一个地址为 12,也已经有数据存储,继续向下探测。下一个地址为 13,也已经有数据存储,继续向下探测。下一个地址为 14,也已经有数据存储,继续向下探测。下一个地址为 15,也已经有数据存储,继续向下探测。下一个地址为 16,也已经有数据存储,继续向下探测。直到找到空闲地址 17,将 74 存储在该地址处。
最终,散列表中的数据存储情况如下:
0: 10
1: 01
2:
3: 20
4: 87
5:
6: 69
7:
8: 56
9: 9
10: 27
11:
12: 29
13: 13
14:
15: 15
16:
17: 74
计算成功查找的平均查找度,需要先计算所有查找操作的总次数,然后除以数据项个数。假设要查找的数据项是随机的,那么每个数据项在每个地址处被查找的概率相等,为 1/18。因此,所有查找操作的总次数为:
1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 2 + 1 + 3 + 9 = 22
其中,最后一个 9 是因为在查找关键字 74 时,需要探测 9 个地址才能找到空闲地址。
因此,成功查找的平均查找度为:
22 / 12 ≈ 1.83
这个结果意味着,成功查找一个数据项需要在散列表中平均探测 1.83 个地址。
阅读全文