菜鸟都能理解的看毛片(KMP)算法

首先,允许我标题党了,看毛片算法和毛片没啥关系,如果你不小心进来了,那么我只能说呵呵了,呵呵^ ^

KMP算法其实是一个O(n)的字符串匹配算法

A = "ababacbacab"

B = "baca"

假设位置从1开始

这样可以说B是A的一个子串,首先我们想到的办法是枚举A的位置,比如

1.首先枚举位置A[1],即字符'a',然后从A[1]开始比较"abab"是否等于"baca",显然不等

2.接着枚举位置A[2],即字符'b',然后从A[2]开始比较"baba"是否等于"baca",显然,又不匹配

......

经过不断得尝试,我们终于枚举到一个位置A[7]开始的子串"baca"与B相等,my god,真不容易

我们来计算一下时间复杂度,我们枚举A的位置,最多有O(A.length())个位置,并且每个位置最多要匹配O(B.length()),所以,算法复杂度当然是O(A.length()*B.length())的啦


下面我们来见识一下神奇的看毛片算法

看毛片算法的思想是用两个指针i和j来指示A和B中的一个位置

1) 用i来表示当前匹配到A中的哪个位置啦

2) 用j来表示当前匹配到B中的哪个位置啦

3) 并且要满足B[1...j]要和A[i+j-1...i]相等

哦?很难理解啊,下面的图(图1)应该使你能够一拍脑袋,“哦,我太聪明了,这么简单!”


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部