当前课程知识点:数据结构(下) > 第九章 词典 > (d1)散列:排解冲突(1) > 09D1-1 一山二虎
此前我们已经多次指出
对于需要动态维护的散列表 冲突是不可避免的
无论你的散列函数设计的有多么精妙
因此我们不得不回答的第二个重要问题就是
一旦发生冲突 我们应该如何加以排解
当然 任何一种可行的排解方法
都应该是在事先就约定好的预案
所谓冲突 形象的说 也就是一山不容二虎
那么 倘若的确有两只老虎呢
用铁丝网将这座山分成两部分
两只老虎 各居一侧
这种思路 也就是所谓的多槽位法
如果此前的桶单元 对应于山
那么每一个slot 就对应于在这个山中
用铁丝网分割出的一个子区域
在这幅图中 如果这是散列表
那么这就是一个一个又一个的桶单元
在这里 我们将每个桶单元都继续细分为ABCD 4个槽位
每个桶内部的这些槽位
就可以用来存放彼此冲突的若干个词条
比如 这就是一个长度为23的散列表
其中每一个桶都被分成了3个槽位
现在我们依次将24个词条插入其中
可以看到这里尽管有些词条的确会彼此冲突
但依然可以在对应的桶中和平共处
当然 查找过程需要多出一步
除了需要根据关键码确定对应的桶单元地址
还需要在桶中遍历所有的槽位
直到找到目标或者失败
当然 只要每个桶中槽位的总数能够控制在常数以内
整体的查找效率就不会有实质的降低
不过这种方法的缺点 也是显而易见的
你能看得出来吗
是的 每一个桶具体应该细分为多少个槽位
在事先几乎是无法预测的
如果分的过细 就会造成空间上的浪费
而反过来 无论你分的多细 在极端的情况下
仍有可能在某个特定的桶中 发生大规模的冲突
那么面临这一两难的抉择 如何破解呢
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-OJ系统说明
--关于OJ
--1-注册与登录
--2-界面与选课
--3-提交测试
-关于课程教材与讲义
--课程教材与讲义
-关于讨论区
--关于讨论区
-微信平台
--html
-PA晋级申请
--PA晋级
-(a)概述
--07A-1 纵览
--07A-5 接口
-(a)概述--作业
-(b1)BST:查找
-第七章 二叉搜索树--(b1)BST:查找
-(b2)BST:插入
-(b2)BST:插入--作业
-(b3)BST:删除
-第七章 二叉搜索树--(b3)BST:删除
-(c)平衡与等价
-(c)平衡与等价--作业
-(d1)AVL树:重平衡
-第七章 二叉搜索树--(d1)AVL树:重平衡
-(d2)AVL树:插入
-(d2)AVL树:插入--作业
-(d3)AVL树:删除
-(d3)AVL树:删除--作业
-(d4)AVL树:(3+4)-重构
-(d4)AVL树:(3+4)-重构--作业
-本章测验
--章节测验
-(a1)伸展树:逐层伸展
--习题
-(a2)伸展树:双层伸展
--习题
-(a3)伸展树:算法实现
--习题
-(b1)B-树:动机
--习题
-(b2)B-树:结构
--习题
-(b3)B-树:查找
--习题
-(b4)B-树: 插入
--习题
-(b5)B-树: 删除
--习题
-(xa1)红黑树:动机
--习题
-(xa2)红黑树:结构
--习题
-(xa3)红黑树:插入
--习题
-(xa4)红黑树:删除
-本章测验
--习题
-(b)散列:原理
--09B-3 数组
--09B-4 原理
--09B-5 散列
--09B-6 冲突
--习题
-(c)散列:散列函数
--习题
-(d1)散列:排解冲突(1)
--习题
-(d2)散列:排解冲突(2)
--习题
-(e)桶/计数排序
--习题
-本章测验
--本章测试
-(a1)需求与动机
--习题
-(a2)基本实现
--习题
-(b1)完全二叉堆:结构
--习题
-(b2)完全二叉堆:插入与上滤
--习题
-(b3)完全二叉堆:删除与下滤
--习题
-(b4)完全二叉堆:批量建堆
--习题
-(c)堆排序
--习题
-(xa1)左式堆:结构
--习题
-(xa2)左式堆:合并
--习题
-(xa3)左式堆:插入与删除
-本章测验
--本章测试
-(a)ADT
--习题
-(b1)串匹配
--习题
-(b2)蛮力匹配
--习题
-(c1)KMP算法:从记忆力到预知力
--习题
-(c2)KMP算法:查询表
--习题
-(c3)KMP算法:理解next[]表
--习题
-(c4)KMP算法:构造next[]表
--习题
-(c5)KMP算法:分摊分析
--习题
-(c6)KMP算法:再改进
-(d1)BM_BC算法:以终为始
-(d2)BM_BC算法:坏字符
-(d3)BM_BC算法:构造bc[]
-(d4)BM_BC算法:性能分析
-(e1)BM_GS算法:好后缀
-(e2)BM_GS算法:构造gs表
-(e3)BM_GS算法:综合性能
-(f1)Karp-Rabin算法:串即是数
-(f2)Karp-Rabin算法:散列
-本章测验
--本章测试
-(a1)快速排序:算法A
-- 12a1-5: 实例
--习题
-(a2)快速排序:性能分析
--习题
-(a4)快速排序:变种
-(b1)选取:众数
-(b3)选取:通用算法
--习题
-(c1) 希尔排序:Shell序列
--习题
-(c2)希尔排序:逆序对
-本章测验
--本章测试