对于查找集合{16,24,7,9,13,20},设散列表长为8,散列函数为H(key) = key mod 7,请分别画出线性探测法处理冲突构造的散列表。写查找成功和查找不成功的长度
时间: 2024-12-17 19:45:18 浏览: 5
当使用线性探测法处理冲突构造散列表时,我们首先需要确定每个元素插入的位置。给定的散列函数H(key) = key mod 7,意味着我们将对元素取模7来决定它们在散列表中的索引。
对于集合{16, 24, 7, 9, 13, 20},我们按顺序计算每个元素的散列值并插入:
1. 第1个元素(16): H(16) = 16 mod 7 = 2 -> 第2位插入16
2. 第2个元素(24): H(24) = 24 mod 7 = 3 -> 第3位插入24 (与16发生冲突,线性探测到第4位)
3. 第3个元素(7): H(7) = 7 mod 7 = 0 -> 第1位插入7 (覆盖了16)
4. 第4个元素(9): H(9) = 9 mod 7 = 2 -> 第2位插入9 (替换掉原来的16)
5. 第5个元素(13): H(13) = 13 mod 7 = 6 -> 第7位插入13 (满表)
这里会发生冲突,因为已经满表,所以线性探测下一个空位置,即第一个位置,依次替换直到找到空位,所以会移到第1位。
6. 第6个元素(20): H(20) = 20 mod 7 = 6 -> 第7位插入20 (同样替换掉13)
散列表的分布如下:
```
[_, _, _, _, _, _, _] // 初始化为空
[13, _, _, _, _, _, 20] // 冲突解决后
[_, _, _, _, _, _, 20]
[_, _, _, _, _, 13, _]
[_, _, _, _, _, 13, _]
[_, _, _, _, 9, _, _]
[16, _, _, _, 9, _, _] // 插入16
```
查找过程:
- 查找元素7,从第1位开始,找到7。
- 查找元素16,由于之前被替换到了第4位,也能够找到。
- 查找元素24,先从第3位找不到,然后探测到第4位找到24。
- 查找元素9,直接从第4位找到。
- 查找元素13,由于之前的冲突,最终从第1位找到。
查找成功的情况,比如7、9和13,都是直接找到对应的槽位;而查找不成功的例子可能是24,因为它需要线性探测才能找到。
查找成功的长度取决于元素是否冲突,如果所有元素都未冲突,那么查找长度将是元素个数,但如果存在冲突,查找长度会大于实际元素个数。在这个例子中,查找成功的平均长度是5(因为有3个直接找到,2个经过一次探测),最坏情况(如所有冲突)查找长度为每个元素都需要探测一次,即6次。
阅读全文