字符串匹配:一个模式p,p是字符串,长度为m;一个文本T,长度为n;我们要做的就是找到所有的偏移量S,使得p(m)为tT(s+m)的后缀。
常用算法:朴素字符串匹配算法(无预处理,有匹配阶段),RK算法(有预处理阶段,有匹配阶段),自动机算法(有预处理阶段,有匹配阶段),
KMP算法(有预处理阶段,有匹配阶段)
时间复杂度:预处理时间+匹配时间
朴素字符串匹配算法:太规矩,太朴素了,当匹配失败时?没有利用这些信息。
后面三种,则都利用到了这些信息。 并且,KMP,和自动机算法有点类似。
**********************************************************************************************
看了,这篇文章,通俗易懂啊!半小时内,对字符串匹配算法的常用套路和思想,都有了个轮廓。谢谢啊、
http://blog.csdn.net/qingen1/article/details/39449547
http://blog.csdn.net/ijuliet/article/details/4200771
幸好没有死磕算法导论。
以后应该这样学习。算法导论,第一次看某个知识点,能理解多少理解多少,主要思考它讲述的脉路。
然后,找些通俗易懂,最好白话点的博客看啊!对,我还是喜欢 白话点的口味的。这个很重要,好的博客,能把脉络,整体思路梳理的很到位,事半功倍。
刚才看那篇博客:
知道kmp很难搞懂,不过还是要搞懂的。因为面试什么的,肯定会问的。
kmp,bp,sunday,
rk(思路很新颖,与前面的算法思路差距比较大),利用模的思想,利用到hash函数的思想。利用的是模式串的整体特征,很厉害啊,能够想到使用整体特征。先前,我们的方法是字符之间的比较,使用的是 部分的特征之间进行比较
思路:模式串p(长度m),匹配字符串(长度n),对于n中所有长度为m的字符串。当字符串和模式串对应的hash值相同时,才有可能(不是一定)是匹配的。
难点:“模式串的特征值仅需求一次即可。对于文本中的任意m个字符构成的字串如何快速的求特征就是个难点了
这里给出一个简单的特征计算的方法” (说明,特征计算的方法不止一种喔。嘿嘿)