当前课程知识点:数据结构(下) > 第十一章 串(下) > (f2)Karp-Rabin算法:散列 > 11f2-2: 散列压缩
既然以上问题的根源在于数位的溢出
那么我们很自然地就会应该想到通过压缩来解决它
没错
将一个硕大的取值空间
压缩到一个可存储、可计算的 更小的空间
从方法论上讲
这不正是散列吗
没错 我们需要对指纹来做散列压缩
具体地 我们将借助合适的散列函数
将字符串的指纹
压缩到存储器可支持的范围
这里 我们不妨就以模余法为例
模余的基底 取作素数97
接下来 假设我们需要在这样一个文本串中
寻找模式串8 2 8 1 8
以下的主体流程与蛮力算法一样
我们也是从首个对齐位置开始
逐次地去尝试各个位置
在每一个位置我们都将局部的子串与模式串进行比对
而在这里 最为本质的不同在于
我们将不再是逐个逐个地去比较每个字符
而是直接 在两个串的指纹之间进行比对
为此 我们首先要计算出模式串的指纹
如果我没有算错
应该是77
在文本串中
我们首先尝试的是子串2 7 1 8 2
也不难验证 它所对应的指纹为22
与目标指纹77不符
因此我们可以随即将其排除
并接着转向下一个子串
也就是7 1 8 2 8
同样地 也不难验证
它的指纹为48
与77不符
所以也同样被排除掉
再接下来对应的子串为1 8 2 8 1
它所对应的指纹也不难验算为45
同样与77不符
因而可以排除掉
不难看出
整个算法将在下一个对齐位置发现匹配
是的 这个子串与模式串完全一致
所以它所对应的指纹也应该为77
而实际上 这也是算法所发现的
于是通过这种方法
我们也同样地完成了一次模式匹配
需要提醒你再次注意的是
在整个这样的计算过程中
我们分别只需要
常数的时间
就可以排除或者确认一个对齐位置
而这一点 正是我们设计这种算法的初衷
当然 算法至此依然没有尽善尽美
你能看出其中的问题吗
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)希尔排序:逆序对
-本章测验
--本章测试