设有一组关键字 { 29,01, 13,15,56,20,87,27,69,9,10,74 },散列函数为 H(key)=key%17,采用线性探测方法解决冲突。试在 0 到 18 的散列地址空间中对该关键字序列构造散列表,则成功查找的平均查找长度为 __
时间: 2024-04-28 08:22:30 浏览: 77
首先,我们需要构造一个长度为 19 的散列表(因为散列函数的值域为 0 到 18)。由于采用线性探测方法解决冲突,所以如果插入某个关键字时,其散列地址已经被占用了,就往后顺延,直到找到一个空闲的位置为止。
按照这个方法,我们可以得到以下散列表:
|散列地址|关键字|
|---|---|
|0|20|
|1|01|
|2|13|
|3|15|
|4|56|
|5|27|
|6|69|
|7|29|
|8|74|
|9|9|
|10|10|
|11|87|
|12| |
|13| |
|14| |
|15| |
|16| |
注意,因为散列地址为 12 的位置已经被关键字 87 占用了,所以关键字 27、69 和 9 分别往后顺延,最终找到了散列地址为 5、6 和 8 的位置。
接下来,我们可以计算出成功查找的平均查找长度。对于每个关键字,它成功查找到的概率为 1/12,因为散列表中有 12 个关键字。当查找某个关键字时,需要从其散列地址开始往后查找,直到找到该关键字或者遇到一个空闲位置。如果该关键字在散列表中的位置为 i,那么需要查找的次数为:
1(查找自身) + 1(插入时需要找到的空闲位置数) + i - H(key)
其中,H(key) 表示该关键字的散列地址。因此,成功查找的平均查找长度可以计算为:
(1/12) * [1 + Σ(1+i-H(key))],i 取值范围为 0 到 11
化简后得:
(1/12) * [13 + Σi - ΣH(key)],i 取值范围为 0 到 11
因为 Σi 的取值范围为 0 到 11,所以 Σi 的值为 66。而 ΣH(key) 可以通过计算关键字在散列表中的散列地址之和得到,即:
H(29) + H(01) + H(13) + H(15) + H(56) + H(20) + H(87) + H(27) + H(69) + H(9) + H(10) + H(74)
= 12 + 1 + 13 + 15 + 5 + 3 + 5 + 5 + 4 + 9 + 10 + 7
= 86
因此,成功查找的平均查找长度为:
(1/12) * [13 + 66 - 86] = 3.25
因此,成功查找的平均查找长度为 3.25。
阅读全文