已知一组关键码(19,11,26,4,2),利用哈希函数(H(key)= key % 7)和开地址法(增量di=i)处理冲突,构造表长为9的哈希表,写出冲突处理函数和详细建表过程(散列地址求解过程)并画出构造的哈希表示意图,并计算等概率下查找成功和查找失败时的平均查找长度。
时间: 2024-09-18 21:06:19 浏览: 36
首先,我们来构造一个长度为9的哈希表,使用给定的哈希函数H(key) = key % 7 和 开放地址法处理冲突。我们将每个元素按照其键值进行哈希运算,然后根据得到的位置尝试存储元素。
原始数据: (19, 11, 26, 4, 2)
1. 对于第一个元素19,H(19) = 19 % 7 = 5。因为5已经是表的一个位置,所以我们开始寻找下一个可用位置。由于采用的是简单线性探测(即增量i=0),我们从5开始依次检查6、7、0、1、2、3(跳过已占用的4)。发现5处已有元素,最终选择第2个空位,也就是6处存入19。
2. 第二个元素11,H(11) = 11 % 7 = 4,这个位置已经有元素了,所以查看后续位置:6、7、0、1、2、3。选择第3个空位,也就是2处存入11。
3. 26哈希到H(26) = 26 % 7 = 5,冲突同上,从5开始找:6、7、0、1、2、3。选择第7个空位,即最后一位7处存入26。
4. 4哈希到H(4) = 4 % 7 = 4,再次冲突,从4开始找:5、7、0、1、2、3。选择第5个空位,即5处存入4。
5. 最后一个2哈希到H(2) = 2 % 7 = 2,直接放在初始位置。
现在哈希表看起来像这样(数字表示位置,星号(*)代表冲突后的放置位置):
```
* * 19 2 *
* 11 26 4
*
```
接下来计算平均查找长度(Assuming a uniform distribution for key values):
- 查找成功平均长度:对于均匀分布的随机元素,查找成功的可能性为表长度除以总数,即 9 / 5 = 1.8。查找成功通常只需要一次,所以平均次数是1次。
- 查找失败平均长度:当发生冲突时,我们最多需要检查表的其他所有位置,最坏的情况是遍历整个表(如果所有的后续位置都已被占用)。因此,平均查找失败次数是表长度减去1(因为最后一个位置无需检查),即 9 - 1 = 8 次。每次失败的概率是1/7(因为有7个位置),所以失败平均长度为 8 * (1/7) = 8/7 ≈ 1.14。
综合以上,等概率下查找成功的平均查找长度约为1.8次,查找失败的平均查找长度约为1.14次。注意,实际查找长度可能会更短,因为大多数冲突在查找过程中会找到下一个空位。
阅读全文