当前课程知识点:数据结构(下) > 第十一章 串(上) > (c5)KMP算法:分摊分析 > 11c5-1: 失之粗糙
以下 我们就来对KMP算法的性能作一分析
我们知道 KMP算法的计算过程
可以根据对齐位置
相应地分为若干个阶段
然而 每一个阶段所对应的计算量是有很大区别的
我们很快就会看到 如果只是简单地从最坏的角度来进行估计
我们将无法准确地来评估这一算法
而实际上真正有效的方法是
放眼整个计算过程
将整体的计算成本分摊到每一个阶段
没错 分摊
我们这里需要再一次地借助分摊的分析技巧
而这里我们将要采用的估算方法
也是分摊分析中的一种典型手法
我们首先来看一种貌似无可厚非
但实则非常粗糙的估算方法
这一方法建议我们将注意力放在文本串中的任一字符上
因为这种方法认为我们只要估算出每一个字符所参与的比对次数
也自然地就可以得到整体的比对次数
然而我们很快就会发现
在任何一个特定的字符处
我们的模式串的确有可能会多次地后移
实际上不难构造出这样的例子
也就是相对于文本串中的某个特定字符
模式串有可能需要连续地后移多次
并且用其中多达Ω(m)个字符 与文本串中的这个字符进行比对
当然具体的次数可能是m/3 m/40
或者m/500
但无论如何 在渐进的意义上都可以达到Ω(m)次
因此 如果再考虑到主串所贡献的那个因子n
那么按照这种思路
KMP的时间复杂度似乎会高达Ω(n*m)
这样一个分析结论多少会让我们感到沮丧
因为蛮力算法也不过如此
然而事实上这种方法的确失之粗糙
而接下来更为精细的分析将表明
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)希尔排序:逆序对
-本章测验
--本章测试