#include #include using namespace std;
int index_bf(char *s,char *t)
//從串s的第乙個字元開始找首次與串t相等的子串
else
if(j>t[0])
return (i-t[0]);
} return -1;
}void getnext(char *t,int next)
//求模式t的next值並存入nxet陣列中 }
int index_kmp( char *s,char *t,int pos,int next )
//從串s的第pos個字元開始找首次與串t相等的子串。
else
j = next[j];//回溯
if(j>t[0])
return i-t[0];
}int main()
kmp的改進在於:每當一趟匹配過程中出現字元比較不等時,不需回溯i指標,而是利用已經得到的「部分匹配」的結果將模式向右
「滑動」盡可能遠的一段距離後,繼續進行比較。
那麼需要解決下述問題:
當匹配過程中產生「失配」(即si≠pj)時,模式串「向右滑動」可行的距離多遠,換句話說,當主串中第i個字元與模式中第j個
字元「失配」時,主串中第i個字元應與模式中哪個字元再比較?
j 1 2 3 4 5 6 7 8
a b a a b c a c
next 0 1 1 2 2 3 1 2
實際上設next[j] = k,這表明在模式串中存在下列關係:
『p1……pk-1』 = 『pj-k+1……pj-1』
則求next函式值的演算法為:
void get_next(sstring t,int next)
else
j = next[j];
} }
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...