KMP演算法學習

2022-06-01 01:36:09 字數 452 閱讀 9896

kmp:單模式串匹配演算法,重點:利用了已經部分匹配這個有效資訊,保持i指標不變,j指標回溯,使得模式串盡可能的移動到有效位置; 

入門可參見:

next陣列是這個演算法的重點,也是考察點,next陣列的實際意義:字首和j指標之前的k個相同的字元,即p[0,k] == p[j-k,j]; 

next陣列的求法: 劃分問題:當p[i]==p[j]時 ,++;p[i] !=p[j]的時候,j回溯,找更短的字首; 

next陣列的用法:求迴圈節,週期,既是字首又是字尾的子串,字首的迴圈節等等;

補充一下next陣列求迴圈節的原理:

可參見:

其實就是劃分了2種情況:當前字尾沒有重疊的時候,反證法可證沒有迴圈節;

當前字尾有重疊的時候,利用next的實際意義畫個圖傳遞一下子串的等於關係,發現只有能被整除的時候的,才有迴圈節(且是最長迴圈節len/(len-next[len]));

KMP演算法學習

先貼上一點 等腦子清醒點再好好理解 求next陣列 public static int getnext string pattern else else return next public static int search string src,string pattern,int nextva...

KMP演算法學習

一 什麼是kmp演算法 knuth morris pratt 字串查詢演算法 常簡稱為 kmp演算法 是在乙個 主文字字串 s內查詢乙個 詞 w的出現,通過觀察發現,在不匹配 發生的時候這個詞自身包含足夠的資訊來確定下乙個匹配將在 開始 以此避免對以前匹配過的字元重新檢查。在原串中匹配模式串 二 k...

KMP演算法學習

1.kmp演算法簡介 2.樸素的匹配演算法 在介紹kmp演算法之前我們來看看那樸素的匹配演算法。定義 我們是在主串中搜尋模式串。如下圖當主串在e的位置與模式串發生失配時 e前面的都是匹配的 樸素的匹配演算法做的是,將模式串後移一位在去匹。我們可以思考這樣做是否有意義,因為模式串c前面是與主串匹配的,...