KMP演算法總結

2021-08-03 16:41:06 字數 677 閱讀 4638

現在假設有兩個字串a:bbc abcdab abcdabde,b:abcdabd。現在要在a中找b。比較暴力的方法是直接搜尋:

void gosearch()

}

上述**最核心就是while迴圈,舉兩個例子說明其作用:

還是選取b串作為說明。

假設現在要求next[6],那麼當前的j=next[5]=1(next陣列的下標從1開始),那麼b[5]=b[1],j++,next[6]=2.

意思是第5個字元a已經匹配了第乙個字元a,第6個字元b也匹配了第二個字元b,next[6]=next[5]+1。

然後求next[7],當前j=2。但是b[6]!=b[2],那麼跳轉到以b[2]為字尾的前乙個字元繼續匹配。

搜尋匹配的過程和next陣列的求取很類似,**:

void gosearch()

}}

#include#include#includeusing namespace std;

int next1[100];

char a[300];

char b[100];

void makenext()

}void gosearch()

}}int main()

KMP演算法總結

kmp題目重在理解next陣列的含義 next陣列的作用 next j 記錄模式串中第 j 個字元的最長公共字首長度 重要,這是它的意義所在 第二種理解方式,當模式串與主串失配時,跳回的位置。next len 即字串 0 結束標誌的next值 單個字串匹配時與週期有關 hdu 1711 模板題 33...

KMP演算法總結

kmp演算法是用來實現模式匹配的,其時間複雜度是o m n 具體原理見 其中有用到next陣列來計算子串中公共項的位數,簡單來說,就是子串遇到不匹配時,就查next資料來決定前進幾位 移動位數 已匹配的字元數 對應的部分匹配值 1 要不要減一看next陣列第一位是不是為1,個人覺得加一後是有好處的,...

kmp演算法總結

kmp演算法總結 kmp演算法,是一種減少字串匹配時複雜度的演算法,本演算法減少了兩個字串遇到不相等的情況是的匹配次數,也就是減少了主串的回溯次數,跳過了不必要的匹配,使原來的m n的時間複雜度變成了m n。kmp演算法大致分為兩個部分 next陣列,next陣列記錄了模式串字首字尾的長度,求模式串...