演算法導論 BF演算法與KMP演算法

2021-06-27 04:44:04 字數 976 閱讀 9939

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