当前课程知识点:数据结构(下) > 第九章 词典 > (c)散列:散列函数 > 09C-9 多项式
当然在实际应用中 原始数据的关键码
未必天生都是整数形式
因此往往需要先做一个预处理
将其转换为整数 称作散列码hashcode
然后才可以将其进一步转换为桶数组中的地址
浮点数以及字符的hashcode转换并不困难
因此接下来我们重点讨论一下
字符串型关键码应该如何更好的完成这种转换
比如一种行之有效的方法就是所谓的多项式法
比如这就是一个长度为n的字符串
我们首先将其中的每一个字符分别转换为对应的整数
接下来 再将来这n个整数
分别视作为一个n次多项式的n个系数
并采用事先确定的某一个常数a
计算出这个多项式的具体数值 并将其作为散列地址
请注意 这样一个一元n次多项式
可以在O(n)而不是n^2的时间内计算得出
因为时间关系 我们忽略掉具体的算法
如果你对这个算法还不甚了解
这个插图应该会对你有所帮助
当然 这里的O(n)毕竟涉及较为复杂的乘法运算
能否加以避免呢
答案也是肯定的
比如这就是一种可行而有效的方法
实验数据也表明
这种散列码转换算法非常适用于英文字符串
可以看到 这里也是通过一个for循环
依次的处理串中的各个字符
对于每一个字符 我们首先将其转换为整数
并对其做累计 而在每次这样的累计之前
原有的累计值 都要按这种方式做一个数位变换
这个图可以帮助我们理解整个变换的过程
如果这是此前累计值的二进制展开
一般的取做32位 那么调整的实际效果就是
将前端的5个比特与此后的27个比特互换位置
这一不断调整不断累加的过程
实际上可以视作为是对以上多项式计算的近似
只不过这里消除了相对费时的乘法计算
至于如何来具体理解和解释这种近似的效果
可以作为你课后的一项作业
当然无论是原始的多项式法
还是变通之后的近似方法
其计算过程 都不免显得相对复杂
你或许会质疑 有这个必要吗
答案是的确有
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)希尔排序:逆序对
-本章测验
--本章测试