kmp演算法是一種改進的字串匹配演算法,由d.e.knuth與v.r.pratt和j.h.morris同時發現,因此人們稱它為克努特——莫里斯——普拉特操作(簡稱kmp演算法)。
在介紹kmp演算法之前,先介紹一下bf演算法。
一.bf演算法
bf演算法是普通的模式匹配演算法,bf演算法的思想就是將目標串s的第乙個字元與模式串p的第乙個字元進行匹配,若相等,則繼續比較s的第二個字元和p的第二個字元;若不相等,則比較s的第二個字元和p的第乙個字元,依次比較下去,直到得出最後的匹配結果。
舉例說明:
s: ababcababa
p: ababa
bf演算法匹配的步驟如下
i=0 i=1 i=2 i=3 i=4
第一趟:
ababcababa 第二趟:a
babcababa 第三趟:ab
abcababa 第四趟:aba
bcababa 第五趟:abab
cababaaba
baababa ab
aba aba
ba abab
aj=0 j=1 j=2 j=3 j=4(i和j回溯)
i=1 i=2 i=3 i=4 i=3
第六趟:a
babcababa 第七趟:ab
abcababa 第八趟:aba
bcababa 第九趟:abab
cababa 第十趟:aba
bcababa
ababa
ababa a
baba ab
aba
ababa
j=0 j=0 j=1 j=2(i和j回溯) j=0
i=4 i=5 i=6 i=7 i=8
第十一趟:abab
cababa 第十二趟:ababc
ababa 第十三趟:ababca
baba 第十四趟:ababcab
aba 第十五趟:ababcababa
ababa
ababa a
baba ab
aba ababa
j=0 j=0 j=1 j=2 j=3
i=9
第十六趟:ababcabab
aabab
aj=4(匹配成功)
**實現:
int bfmatch(char *s,char *p)
} if(j==0)
next[i]=0;
} }
}
bool equals(char *p,int i,int j) //判斷p[0...j-1]與p[i-j...i-1]是否相等
return true;
}
BF和KMP演算法
字串匹配演算法 include include using namespace std define ok 1 define error 0 define overflow 2 typedef int status define maxstrlen 255 使用者可在255以內定義最長串長 type...
BF演算法和KMP演算法
今天資料結構學習了兩個字串匹配演算法,bf演算法和kmp演算法。課本講的過於籠統,不能理解kmp演算法,因此在網上找些資料後整理筆記如下。字串匹配演算法就是在文字串中匹配模式串。bf brute force 演算法即暴力演算法。從第乙個字元開始匹配,每當匹配失敗時,模式串向右滑動一位。最後返回第一次...
關於傳統字元查詢(BF演算法)和KMP演算法
關於字串的查詢,以前一直覺得很難,現在重新來看,感覺要好很多了 多的不談,直接上 關於模式串的查詢,bf演算法 傳統演算法 與kmp演算法 include using namespace std intbf string s string t else if j t.length else void...