字元 BF 和 KMP演算法

2021-06-21 16:38:26 字數 2374 閱讀 6811

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...