C KMP演算法之next陣列的生成

2021-09-11 02:57:51 字數 709 閱讀 8747

對於乙個字元來說,如果這個字元向前追溯n個,與從開頭開始向後數n個的字串完全相同,則這個數的next陣列的值為n+1(對於從0開始標號的字元陣列來說,這個數的next陣列的值為n)

#include

#include

using namespace std;

intmain()

next[0]

=-1;

//生成next陣列

for(i =

1; i < total; i++

)//填a[i]的next值}if

(t == i)

//如果上述迴圈走完了}}

//輸出

cout <<

" ";

for(i =

0; i < total; i++

) cout << endl;

for(i =

0; i < total; i++

)system

("pause");

}

執行結果

a  b  a  b  c  a  b  a  b  a  b  a  b  c  a  b  a  b

-1 0 0 1 2 0 1 2 3 4 3 4 3 4 5 6 7 8 請按任意鍵繼續. . .

KMP演算法之Next陣列 C

這篇文章不解釋什麼是o n 記法 kmp是乙個兩串字串比較的演算法,分別為p 模式串,s 文字串。我的文章一般都是廢話少說,直接就進入主題。我們假設現在需要匹配如下 傳統的做法 逐一的遍歷s串,再遍歷p串,s i p j i 0,j 0 因為不相等,所以 i 會自增 1 j 回溯 0,當 i 7 發...

C KMP演算法的實現

kmp演算法是一種改進的 字串匹配 演算法,由d.e.knuth,j.h.morris和v.r.pratt同時發現,因此人們稱它為 克努特 莫里斯 普拉特操作 簡稱kmp演算法 kmp演算法的關鍵是利用匹配失敗後的資訊,儘量減少模式串與主串的匹配次數以達到快速匹配的目的。具體實現就是實現乙個next...

KMP演算法的next陣列

本文參考 google 資料結構 c語言 include include author silence time 2012 5 19 description kmp演算法的next using namespace std void next char t,int l,int next else 1 ...