当前课程知识点:数据结构(下) > 第十一章 串(下) > (f2)Karp-Rabin算法:散列 > 11f2-1: 数位溢出
在前一节中
我们已经成功地完成了一次视角转换
了解到应该如何从数学上
将每一个串视作为一个自然数
以下 我们就来将这一构思
具体地兑现为一个算法
很有意思的是
我们在此需要用到第9章的关键技术
散列
我们将每一个串所对应的自然数称作为它的指纹
fingerprint
因为这个数相对于串 就像指纹相对于人一样
可以用来甄别其身份
然而我们注意到
这样一个自然数是以字符集的规模作为进制的
因此字符集只要不是很小
这类指纹的数值就会变得很大
这不能不说是个坏消息
比如 我们知道对于ASCII字符集来说
它的规模为128
对于这类字符
即便模式串的长度不是特别地长
它对应的指纹也会长得令我们吃不消
我们可以来做一个快速的封底估算
128是2的7次方
因此即便是长度为10的模式串
它所对应的指纹也至少需要70个比特方能表示
这就意味着
即便在64位的计算平台上
长度不小于10的字符串
将无法直接表示
而更糟糕的是 我们因此而遇到的麻烦还不止这些
实际上 在整数的字宽已经不能继续视作为常数之后
整数之间的运算
也不能继续保证可在常数时间内完成
尽管RAM模型曾经的确作过这样一个不切实际的假设
实际上 就渐进复杂度的意义而言
此时 每次指纹比对所需要的时间
将仍然线性正比于串的长度
也就是说 我们的计算效率将重新退化到蛮力算法的水准
那么 为了破解这一难题
你又能想到哪些高招呢
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)希尔排序:逆序对
-本章测验
--本章测试