kmp算法

kmp算法

改進的字符串匹配算法
KMP算法是一種改進的字符串匹配算法,由D.E.Knuth,J.H.Morris和V.R.Pratt同時發現,因此人們稱它為克努特——莫裡斯——普拉特操作(簡稱KMP算法)。KMP算法的關鍵是利用匹配失敗後的信息,盡量減少模式串與主串的匹配次數以達到快速匹配的目的。具體實現就是實現一個next()函數,函數本身包含了模式串的局部匹配信息。
    中文名:kmp算法 外文名: 适用領域:計算機 所屬學科:計算機 作用:簡化操作

背景

給定一個主串(以 S 代替)和模式串(以 P 代替),要求找出 P 在 S 中出現的位置,此即串的模式匹配問題。

Knuth-Morris-Pratt 算法(簡稱 KMP)是解決這一問題的常用算法之一,這個算法是由高德納(Donald Ervin Knuth)和沃恩·普拉特在 1974 年構思,同年詹姆斯·H·莫裡斯也獨立地設計出該算法,最終三人于 1977 年聯合發表。

基本思想

假設在模式匹配的進程中,執行T[i]和W[j]的匹配檢查。若T[i]=W[j],則繼續檢查T[i+1]和W[j+1]是否匹配。若T[i]<>W[j],則分成兩種情況:若j=1,則模式串右移一位,檢查T[i+1]和W是否匹配;若1<=m,則模式串右移j-next(j)位,檢查T[i]和W[next(j)]是否匹配。重複此過程直到j=m或i=n結束。

文獻中,朱洪對KMP算法作了修改,他修改了KMP算法中的next函數,即求next函數時不但要求W[1,next(j)-1]=W[j-(next(j)-1),j-1],而且要求W[next(j)]<>W[j],他記修改後的next函數為newnext。顯然在模式串字符重複高的情況下,朱洪的KMP算法比KMP算法更加有效。

以下給出朱洪的改進KMP算法和next函數和newnext函數的計算算法。

KMP串匹配算法

輸入:正文串j和模式串W[1,m]

輸出:匹配結果match[1,n]

上一篇:四城同創

下一篇:制表位

相關詞條

相關搜索

其它詞條