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