龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > C/C++开发 >

C语言kmp算法简单示例和实现原理探究(2)

时间:2014-09-25 02:32来源:网络整理 作者:网络 点击:
分享到:
复制代码 代码如下: kmp-matcher(T, P) n-length[T] m-length[P] pi-compiter-prefix-function(P) q-0 for i-1 to n do while q0 and P[q+1]!=T[i] do q-pi[q] //前缀的前缀... if P[q+1]==T[i] then q

复制代码 代码如下:

kmp-matcher(T, P)
    n<-length[T]
    m<-length[P]
    pi<-compiter-prefix-function(P)
    q<-0
    for i<-1 to n
        do while q>0 and P[q+1]!=T[i]
            do q<-pi[q] //前缀的前缀...
        if P[q+1]==T[i]
            then q<-q+1
        if q==m
            then print “Pattern occurs with shift”i-m
                    q<-pi[q]

这两段代码思想完全相同,如果和前缀不同就比较前缀的前缀…,比较巧妙。如果kmp有难理解的地方,估计就是这段伪码的了。

KMP算法的时间复杂度为O(n+m)。

这里需要强调一下,KMP算法的仅当模式与主串之间存在很多部分匹配情况下才能体现它的优势,部分匹配时KMP的i不需要回溯,否则和朴素模式匹配没有什么差别。

精彩图集

赞助商链接