分离链接法与性能分析
分离链接法
分离链接法也称拉链法、链地址法,将相应位置上有冲突的所有关键字存储在同一个单链表中。
例如关键字序列为{47, 7, 29, 11, 16, 92, 22, 8, 3, 50, 37, 89, 94, 21},哈希函数h(key) = key % 11,用分离链接法处理冲突。
分离链接法
知识测验
题目
桶 5 当前为 head → 27 → 16 → ∅,用头插法插入 38 后是什么?
互动实验
分离链接:头插与指针变化
访问权限PRO
PRO EXCLUSIVE探索不止于此
尊享 Pro 权益解锁完整互动实验、进阶解析与精选参考答案。
性能分析
哈希表的平均查找长度(ASL, Average Search Length)用来度量哈希表查找效率。关键字的比较次数,取决于产生冲突的多少。影响产生冲突多少有三个因素:
-
哈希函数是否均匀
-
处理冲突的方法
-
哈希表的装填因子
采用开放地址法时,合理的最大装填因子通常不超过0.85;分离链接法的装填因子可以大于1,选择合适的哈希函数可以使哈希表的查找效率期望是常数,它几乎与关键字的空间大小n无关。这是以较小的为前提,因此哈希表是一个以空间换时间的结构。
哈希表的存储对关键字是随机的,因此哈希表不便于顺序查找、范围查找、最大值/最小值查找等操作。
知识测验
题目
本节分离链接例子将 14 个关键字放入 11 个桶,α = 14/11 > 1。这意味着什么?
知识测验
题目
一个桶的链为 30 → 19 → 8,三个 key 的成功查找概率相同,只计结点 key 比较,平均比较次数是多少?
知识测验
题目
为什么普通哈希表不适合直接查询“介于 20 和 50 之间的所有 key”?
动手练习
分离链接:手算头插与查找代价
从 7 个空桶开始,按顺序插入 32、39、46、10、17、24,h(key) = key % 7。只使用分离链接法,冲突结点采用头插法。
- 逐个计算桶号,写出 X.next 和桶 head 的指针变化,并画出每次插入后的链表。
- 画出最终哈希表,并计算装填因子。
- 假设六个关键字的成功查找概率相同,只计结点 key 的比较次数,求平均查找长度 ASL。