当前课程知识点:数据结构(下) > 第十一章 串(上) > (c6)KMP算法:再改进 > 11c6-2: 以卵击石
为了更好地理解这一结论
我们不妨来设想这样一个场景
我们可以将这里的字符1比作是一块石头
没错 一块坚硬的石头
而字符0呢
则可以想象为是鸡蛋
没错 鸡蛋
而且是一筐鸡蛋
我们的算法就犹如一个幼稚的孩子
他想确认一下 石头和鸡蛋哪一个更硬
因此作为学习的成本
他需要实际地将二者做一次比对
也就是俗称的以卵击石
其后果是可想而知的
如果这个孩子还不是十分幼稚的话
经过这样一次实践
他就应该会发现
石头要远远地硬于鸡蛋
因此 他应该会将筐中剩余的那些鸡蛋妥善地保管起来
让它们离这块石头越远越好
然而反观KMP算法在刚才这个实例中的表现
我们就会发现 它的行为方式居然与一个非常非常幼稚的孩子极其类似
难道不是这样吗
如果第一次碰撞还勉强可以说是交学费的话
那么后续的一而再 再而三 以至更多次的碰撞
的确显得不够聪明
事实上 从信息的角度来看
我们一开始既然就已经掌握了这个模式串的所有信息
那么自然就应该知道
在这个0之前的一系列字符都是0
所以在算法的执行过程中
一旦发现这个0与文本串不相匹配
那么自然地就应该知道
后续的这些尝试必然都是徒劳的
尽管不会铸成错误
但毕竟会白白浪费时间
那么 KMP算法的这个版本
问题究竟出在哪呢
-选课之前
--写在选课之前
--宣传片
-考核方式
--考核方式
-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)希尔排序:逆序对
-本章测验
--本章测试