kmp演算法主要是對樸素的模式匹配演算法的改進,假設有string a和string b,i為a的首個字母的下標,j為b的首個字母的下標,即i=0,j=0,現要在a中匹配b,若用樸素的模式匹配演算法,則i需要不斷的回溯,如a=acbxacbd,b=abcd,當i=3,j=3時,發現字元不相等,如果使用的是樸素的模式匹配演算法,則需要將i回溯為1,即i=i-j+1,而j=0。
若用的是kmp模式匹配演算法,i不需要回溯,只有j根據字串b的具體情況回溯到相應位置。
kmp解決了樸素匹配模式演算法中的i和j的回溯問題,提高了字串匹配的效率
第一部分為方法getnext(),其陣列的元素為在對應字元不相等時j需要回溯到字串b的相應位置
public void getnext(string str,int next)
樸素的模式匹配演算法的時間複雜度為((n-m+1)*m),而kmp提高為n+m
注:m為a的長度,n為b的長度
模式匹配 KMP演算法
字串匹配演算法 include includeusing namespace std define ok 1 define error 0 define overflow 2 typedef int status define maxstrlen 255 使用者可在255以內定義最長串長 typed...
模式匹配KMP演算法
前些日子在為目前該學習什麼而苦惱,就問了一下已經從事多年軟體開發的表哥,他說乙個程式設計師要走的遠,就要學好資料結構和演算法,於是我就重新開始學習資料結構和演算法了 拿起以前上過的資料結構看,看到第四章串的模式匹配時,頗感興趣,就寫了一下程式,實踐了一下。感覺還蠻爽,於是就把以下幾個重要的函式放在此...
KMP模式匹配演算法
首先,這是由knuth morris和prattle三人設計的線性時間字串匹配演算法。這裡就不仔細的講解,網上有更好的講解,在這推薦幾個自己當時學習的kmp所看到的較好理解的 這裡附上自己所學的 includeusing namespace std s 是主串 p 是模式串 int next 100...