String matching整理
来源:互联网 发布:java 替换大括号 编辑:程序博客网 时间:2024/06/05 03:26
主要根据算法导论上第32章整理。共四种匹配算法,开始先给出一个例子说明什么是string matching。
每个算法的时间复杂度如下:
算法导论中值得一提的是里面的语言很简练,没有一丝冗余。
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了。
所有这些方法,我都可以明白,觉得自己还是做得不过,学的仅仅是硬生生的方法,当你讲给别人听时,
别人会觉得这就是典型的中国式教育,不管三七二十一,直接告诉你怎么做,为什么这么做就不管了。
这个有时是有用,但希望自己还是把算法导论上的证明细节好好看看,领悟一下,为什么会是这样!
加油。
0 0
- String matching整理
- KMP Matching: String Matching
- String Matching
- String Matching
- String Matching
- Naive String Matching: String Matching
- Finite Automaton Matching: String Matching
- Rabin Karp Matching: String Matching
- PKU 1580 String Matching
- String matching with simmetrics
- Binary String Matching
- poj 1580 String Matching
- 字符串匹配(String Matching)
- Binary String Matching
- ZOJ 1170 String Matching
- Binary String Matching
- Binary String Matching
- hdu-1306- String Matching
- robotium原理之获取WebElement元素
- Linux下Nginx的安装步骤
- linux内核启动过程分析之内核启动___arm__优秀
- 跨平台MakeFile生成的软件--PreMake
- mxGraph实现按住ctrl键盘拖动图形实现复制图形功能
- String matching整理
- 详解linux下auto工具制作Makefile源码包(制作篇)
- K/3 CLOUD登录安装silverlight失败提示1603错误的解决办法。
- ARM Linux启动过程分析(转的别人一篇论文)
- tar bz2 解压
- ios文件存储--NSFileHandle
- 在Word 2007中添加参考文献及其引用的方法
- 一个简单的struts2 程序
- java操作任何树桩excel