当前课程知识点:数据结构(下) > 第九章 词典 > (d1)散列:排解冲突(1) > 09D1-4 线性试探
查找链的第一种组织方法 就是所谓的线性试探
具体来说 所谓的Linear probing
就是一旦发生冲突之后 我们会转而去试探它的后继
后继的后继 以及后继的后继的后继 诸如此类
同样的 最终可能会因为发现目标而报告成功
或者因为抵达某个空桶 而说明查找失败
可以看到 在如此形式的散列表中
除了数据词条 无需任何附加空间
而更重要的是 每一查找链都集中在某一局部
因此系统的缓存作用将得到充分的发挥
而对于大规模的数据集 如此更可以有效的减少IO
当然这种策略 同样也具有它的弱点
其中重要的一点就是 为了消除以往的冲突
可能会导致后续发生更多的冲突
来看这样一个实例
考察一个长度为7的散列表
假设我们需要插入的是0、1、2、3和7这样5个词条
如果就按照这种顺序依次插入
那么首先是0就位 1就位 2和3也相继就位
为了插入最后的7 我们首先去试探0号单元
结果发现它非空 为了排解这一冲突
我们会转而试探它的后继 也就是1号单元
情况一样 进而去试探2号 3号单元
直到最终在4号单元发现一个空桶
从而将7 安置在这个桶中
在这个散列表的生命期内
发生冲突的只有一个词条 也就是7
现在再来看另一插入次序
比如将7调整到最前端 首先插入它
我们依然开始于一个空的散列表
按照约定的次序 首先将7安置在0号桶
没有冲突 既然0号单元已被占用
所以接下来插入0必然发生一次冲突
并经过一次试探 最终将0安置在1号单元
至此1号桶也会被占用
因此接下来词条1的插入也会发生一次冲突
并最终将它安置在2号桶
这样的故事还会发生多次
具体的也需要在这个位置发现一次冲突之后
才将词条2 存入到3号桶
最后 依然要经过一次冲突
才能将词条3存入4号桶
在整个这样的过程中
词条0、词条1、2和3都发生了冲突
前后对比不难发现
后一种插入序列所对应的很多冲突
本来的确是可以不必发生的
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)希尔排序:逆序对
-本章测验
--本章测试