设有一组关键字 { 92,81, 58,21,57,45,161,38,117 },散列函数为 h(key)=key%13,采用下列双散列探测方法解决第 i 次冲突:h(key)=(h(key)+i×h 2 (key))%13,其中 h 2 (key)=(key%11)+1。试在 0 到 12 的散列地址空间中对该关键字序列构造散列表,则成功查找的平均查找长度为 __
时间: 2023-04-27 18:04:10 浏览: 831
根据双散列探测方法,对于第 i 次冲突,散列地址为 h(key)=(h(key)+i×h2(key))%13。因此,对于关键字序列 { 92,81, 58,21,57,45,161,38,117 },它们的散列地址分别为:
h(92) =
h(81) = 4
h(58) = 8
h(21) = 6
h(57) = 7
h(45) = 6
h(161) = 12
h(38) = 7
h(117) = 11
由于散列地址空间为 到 12,因此需要解决冲突。对于第一次冲突,h(92) 和 h(45) 的散列地址相同,因此需要使用双散列探测方法。此时,h2(92) = (92%11)+1 = 4,因此散列地址变为:
h(92) =
h(92) = (h(92) + 1×h2(92))%13 = 4
对于第二次冲突,h(92) 和 h(117) 的散列地址相同,因此需要再次使用双散列探测方法。此时,h2(92) = (92%11)+1 = 4,h2(117) = (117%11)+1 = 8,因此散列地址变为:
h(92) =
h(92) = (h(92) + 1×h2(92))%13 = 4
h(92) = (h(92) + 2×h2(92))%13 = 11
对于第三次冲突,h(45) 和 h(117) 的散列地址相同,因此需要再次使用双散列探测方法。此时,h2(45) = (45%11)+1 = 8,h2(117) = (117%11)+1 = 8,因此散列地址变为:
h(92) =
h(92) = (h(92) + 1×h2(92))%13 = 4
h(92) = (h(92) + 2×h2(92))%13 = 11
h(45) = 6
h(45) = (h(45) + 1×h2(45))%13 = 4
h(45) = (h(45) + 2×h2(45))%13 = 11
h(117) = 11
最终得到的散列表为:
: 92
1:
2:
3:
4: 81
5:
6: 21
7: 57
8: 58
9:
10:
11: 45, 117
12: 161
成功查找的平均查找长度为 (1+1+1+1+1+1+2+1+1)/9 = 1.11。
阅读全文