当前课程知识点:数据结构(下) > 第九章 词典 > (d2)散列:排解冲突(2) > 09D2-3 至多半载
很不幸 我们刚才所设想的坏情况竟然的确可能发生
比如 这就是一个例子
这些散列表的容量取做12
不失一般性 假设就从0号桶单元开始
连续的发生足够多次的冲突
根据平方试探的规则
我们不难确认各次试探的具体位置
当然在课后你可以对此做一验算
你会发现 我们试探的足迹只会涉及到其中的4个单元
也就是说 尽管在此时有高达2/3比例的桶都是空的
我们竟然没有办法找到它们
当然你可能会抱怨这里
并没有按照常规将表长取作为一个素数
是的 借助数论的知识不难证明
只要表长M是合数 这种情况就必然可能发生
那么将表长改为素数就足够了吗
我们再来看这样的一个例子 当然这是一个反例
这次我们将表长取做11
没问题 这是一个素数
接下来呢 依然不失一般性 假设从0号桶开始
相继的发生足够多次的冲突
自然 我们同样可以根据平方试探的规则
计算出所有可能抵达的桶单元编号
尽管我们这里直接给出了结果
但我还是建议你在课后就此做一验算
如果不发生意外 我想你和我的结论应该是一样的
也就是说 按照这种规则 无论试探多少次
我们的足迹只能涉及到这11个桶中的6个而不是全部
换而言之 即便此时有多达接近一半的桶都是空的
我们却无法找到并利用它们
当然情况还不是糟糕透顶
因为我们发现毕竟前6次试探所经过的桶
必然都是互异的 这是一个巧合吗 不是
同样的 稍微运用一些数论的工具就不难证明
只要表长M是素数
平方试探的足迹就恰好会遍及其中的M/2上整个桶
因为一般的素数M都是奇数
所以这个比例刚刚超过50%
没错 50%
这恰恰是一个重要的分水岭
这也是情况可能糟糕到的最坏程度
而关于这一点的正面结论是
只要我们的表长是个素数
而且能够保持装填因子不超过50%
就一定不会发生刚才所说的负面情况
否则 就未必能够保证
以下 我们就来给出证明
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)希尔排序:逆序对
-本章测验
--本章测试