当前课程知识点:数据结构(下) > 第九章 词典 > (c)散列:散列函数 > 09C-6 平方取中
散列函数是一个庞大的家族
其中的成员形形色色 各有所长
这也是散列技术的趣味性和魅力所在
接下来我们不妨就来看看其中的几个典型代表
首先是所谓的数字分析法
这里的原则是 无论此前的关键码有多少位
我们只从其中挑选出若干位 构成散列地址
比如我们可以将关键码的数位间隔的分为两组
并选择其一组成最终的散列地址
当然 尽管这里需要分组
但分组方式必须是事先确定的
否则也就违背了确定性的原则
另外 这种方法的缺陷也十分明显
因为没有被选用的那一组数位
对最终的散列地址没有任何的影响和贡献
没有足够的体现均匀性的要求
就此 可以有很多种改进的方法 比如平方取中法
按照这种策略 我们首先要计算出关键码的平方
并截取中间的若干数位作为散列地址
以123为例 如果没有算错 他的平方应该是15129
因此我们可以取居中的3位
也就是521作为对应的散列地址
更复杂的情况 也是按同样的方法处理
至此你或许会有一个疑问
这里为什么我们会倾向于保留居中的数位呢
实际上 这正是为了使得构成原关键码的各数位
能够对最终的散列地址有尽可能接近的影响
我们来看这样一幅图
它将一个数的平方运算
分解为一系列的左移操作 以及若干次加法
如果最终的结果是这个 从图中不难看出
如果忽略进位 每一个数位都是由
原关键码中的若干数位经求和得到的
因此两侧的数位是由更少的原数位累积而得
而越是居中的数位 则是由更多的原数位累积而得
因此截取居中的若干位
可以使得原关键码的各数位对最终地址的影响彼此更为接近
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)希尔排序:逆序对
-本章测验
--本章测试