当前课程知识点:数据结构(下) > 第九章 词典 > (d1)散列:排解冲突(1) > 09D1-2 泾渭分明
多槽位法在空间效率和时间效率之间的两难处境
我们在学习向量时 也曾遇到过
还记得那时的解决办法吗
是的 改用列表
新的策略如这幅图所示
如果这是整个桶数组
那么其中的每一个单元
都将各自拥有一个对应的列表
而每一个列表 都可以用来存放一组彼此冲突的词条
是的 将相互冲突的词条串接起来
也就是所谓的separate chaining
来看独立链法的一个实例
依然是一个长度为23的散列表
接下来我们将64个词条 插入其中
请留意观察 每个桶所对应的列表是如何演化的
相对于多槽位法 独立链法的优势非常明显
比如 除了最初的空链表 我们无需预留任何更多的空间
而且表的长度可以根据需要自由的伸缩
只要系统的资源足够 任意多次的冲突都可以解决
得益于此前对List结构的良好封装
我们只需寥寥几句即可实现相应的散列表结构
当然 这种方法的缺点也同样是很明显的
比如这里需要引入额外的指针
而为了生成或销毁节点
也需要借助动态内存的申请 相对于常规的操作
此类动态申请操作的时间成本大致要高出两个数量级
然而这种方法 最大的缺陷还不仅于此
你能发现吗
是的 系统的缓存功能
在这里 每个桶内部的查找
都是沿着对应的列表顺序进行的
然而在此之前
不同列表中各节点的插入和销毁次序完全是随机的
比如可能会是这样
因此对于任何一个列表而言
其中的节点 在物理空间上往往不是连续分布的
因此系统很难预测你的访问方向
无法通过有效的缓存加速查找过程
当散列表的规模非常之大 以至于不得不借助IO时
这一矛盾就显得更加突出了
那么为了有效的激活并充分利用系统的缓存功能
我们又当如何继续改进呢
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)希尔排序:逆序对
-本章测验
--本章测试