String matching整理
2014-06-29 10:13
162 查看
主要根据算法导论上第32章整理。共四种匹配算法,开始先给出一个例子说明什么是string matching。
每个算法的时间复杂度如下:
算法导论中值得一提的是里面的语言很简练,没有一丝冗余。
给出一个例子:
构造有限状态机的算法如下:
有了状态机,当有text匹配时,就在这个状态机中跑。。。
最后给出一个完整的例子:
上图中,第6个字符(c, a)匹配失败,如果按照第一个算法,P直接回退到第一个开始和T的下一个进行比较,实际上,
在P[1-3] == P[3-5],所以当P[6]匹配失败时,我们可以回退到P[4],这样就大大的提高了效率。
注意,回退哪儿只跟P有关,和T没有一毛钱关系。
所以在Preprocessing 阶段,可以先就是π[1-m]。
给出一个例子
有了π,我们就可以来匹配T了。
所有这些方法,我都可以明白,觉得自己还是做得不过,学的仅仅是硬生生的方法,当你讲给别人听时,
别人会觉得这就是典型的中国式教育,不管三七二十一,直接告诉你怎么做,为什么这么做就不管了。
这个有时是有用,但希望自己还是把算法导论上的证明细节好好看看,领悟一下,为什么会是这样!
加油。
每个算法的时间复杂度如下:
算法导论中值得一提的是里面的语言很简练,没有一丝冗余。
1、The navie string-matching algorithm
2、The Rabin-Karp algorithm
它的思路就是利用排除法排除大部分不可能情况,然后对于可能的情况再一一匹配,看是否能成功。3、String matching with finite automata
首先根据Pattern构造有限状态机,其定义如下:给出一个例子:
构造有限状态机的算法如下:
有了状态机,当有text匹配时,就在这个状态机中跑。。。
最后给出一个完整的例子:
4、The Kuth-Morris-Pratt algorithm
这个就是经典的KMP算法,觉得最重要的还是了解其算法实质。上图中,第6个字符(c, a)匹配失败,如果按照第一个算法,P直接回退到第一个开始和T的下一个进行比较,实际上,
在P[1-3] == P[3-5],所以当P[6]匹配失败时,我们可以回退到P[4],这样就大大的提高了效率。
注意,回退哪儿只跟P有关,和T没有一毛钱关系。
所以在Preprocessing 阶段,可以先就是π[1-m]。
给出一个例子
有了π,我们就可以来匹配T了。
所有这些方法,我都可以明白,觉得自己还是做得不过,学的仅仅是硬生生的方法,当你讲给别人听时,
别人会觉得这就是典型的中国式教育,不管三七二十一,直接告诉你怎么做,为什么这么做就不管了。
这个有时是有用,但希望自己还是把算法导论上的证明细节好好看看,领悟一下,为什么会是这样!
加油。
相关文章推荐
- 某人整理的游戏编程资料
- “魔兽世界”的虚拟历险与现实世界的悲喜人生(摘自English Digest,个人整理排版)
- OOABAP开发基础语法整理
- js 操作select和option常用代码整理
- 常用javascript整理
- sqlserver,sqlite,access数据库链接字符串整理
- nutch的一些基础整理
- linux开发常用命令整理
- 正则表达式整理
- Java基础整理
- MySQL语句整理(2)---备份与恢复,约束,多表查询
- Intellij IDEA 快捷键整理
- Robotium-api整理
- Sql语句小整理
- Visual C++开发工具与调试技巧整理
- Delphi 关键字详解[整理于 "橙子" 的帖子]
- 博客整理
- Matlab的GUI整理
- C 语言 整理 10
- [省选前衡八题目整理][BZOJ 1503]郁闷的出纳员(Splay)