您的位置:首页 > 其它

String matching整理

2014-06-29 10:13 162 查看
主要根据算法导论上第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了。



所有这些方法,我都可以明白,觉得自己还是做得不过,学的仅仅是硬生生的方法,当你讲给别人听时,

别人会觉得这就是典型的中国式教育,不管三七二十一,直接告诉你怎么做,为什么这么做就不管了。

这个有时是有用,但希望自己还是把算法导论上的证明细节好好看看,领悟一下,为什么会是这样!

加油。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: