BF演算法及KMP演算法

2021-10-20 14:54:08 字數 1013 閱讀 9467

一.bf演算法

1.原理

暴力查詢

逐個匹配主串字元,然後模式串j值回溯到1重新匹配

2.**實現

二.kmp演算法

1.原理

核心是避免不必要的回溯

問題是由模式串決定,不是目標串決定

只需要將j值模式串中j的位置回溯到next[j]位,而免除了前面不需要的匹配,以此來換取時間

2.難點拆解

①前字尾

②推導next陣列

利用已經部分匹配這個有效資訊,保持i指標不回溯,通過修改j指標,讓模式串盡量地移動到有效的位置

有點像遞迴,自己調動自己,當前面失配的時候,j就在失配的地方回溯,因而j = next[j]

3.**實現

4.kmp演算法改進

乙個例子:

主串s=「aaaaabaaaaac」

子串t=「aaaaac」

這個例子中當『b』與『c』不匹配時應該『b』與』c』前一位的『a』比,這顯然是不匹配的。'c』前的』a』回溯後的字元依然是『a』。

我們知道沒有必要再將『b』與『a』比對了,因為回溯後的字元和原字元是相同的,原字元不匹配,回溯後的字元自然不可能匹配。但是kmp演算法中依然會將『b』與回溯到的『a』進行比對。這就是我們可以改進的地方了。

kmp演算法的改進可以簡述為: 如果a位字元與它next值指向的b位字元相等,則該a位的next就指向b位的next值,如果不等,則該a位的next值就是它自己a位的next值。

BF演算法與KMP演算法

using system namespace kmp else count if j lenb 1 return i lenb else return 0 stathread static void main string args lenb p1.length,p2.length reval km...

BF演算法與KMP演算法

bf演算法思想 實現 public class bf int i 0 int j 0 i與j都從0號位置開始 while ilength j else if j sub.length 當j sub的長度時,說明sub陣列已經遍歷完了 else public static void main stri...

BF演算法與KMP演算法

bf演算法 即暴風 brute force 演算法,是普通的模式匹配演算法,它的思想就是將子串的第乙個字元與母串的第乙個字元進行匹配,若相等,則繼續比較子串的第二個字元和母串的第二個字元 若不相等,則比較母串的第二個字元和子串的第乙個字元,依次比較下去,知道得出最後的匹配結果。算是一種蠻力演算法。i...