KMP演算法筆記

2021-09-26 18:54:59 字數 441 閱讀 2819

kmp演算法用來找出a字串中是否含有字串b。

一般方法:設定兩個變數i,j,分別指向字串a和b,比較過程中若發現有從首字母開始相同的字母,則變數i和j同時自加,知道字串b結束或者出現不一樣的字母,則i和j都回溯,指向首字母;

kmp演算法:相比較一般方法,kmp演算法在a字串**現與b字串中部分相同的字串時,能大大提高運算效率,與一般方法的區別在於比較相同部分字串的時候發現有不一樣的字母,指向第乙個字串的變數i不會回溯,而j的值會回溯到指向next[j]的位置。

改進kmp演算法:主要是當字串中從第二位開始出現連續幾位與首字串相同的字元時,j回溯的值不再是next[j]。 具體操作是針對next陣列,在發現子字串發現字首和字尾相同字元時,對i和j再進行一次自加,然後比較指向的字元是否相等,如果相等,nextval[i] = j,和之前一樣。如果不等,則 nextval[i] = nextval[j] 。

KMP演算法筆記

kmp演算法我是看july部落格學習,這裡只是做個筆記,詳細內容見july的blog kmp演算法的用途 有乙個文字串s和乙個模式串p,現在要查詢p在s中的位置。暴力匹配演算法需要對文字串s進行回溯,kmp演算法就是讓文字串不回退,只需要移動模式串j即可。kmp演算法大體思想 就是當s i p j ...

KMP演算法筆記

無聊開啟vjuge看了一眼,看到有乙個比賽是ac自動機,開啟看看順便xuexi一下子。需要 kmp複習一下感覺全忘了。附兩篇參考資料 和乙個練習題 include include include include include include include include include incl...

KMP演算法筆記

1.kmp演算法用於字串匹配。2.最直觀的字串查詢,是用兩次迴圈遍歷,演算法複雜度0 m n m為待查字串,n為需要查詢的子串。3.kmp演算法的目的為減少n維度。4.include include using namespace std void getnext const string ptr,...