演算法學習之KMP

2021-10-10 07:10:27 字數 761 閱讀 6202

1.演算法的應用

存在兩個不等長的字串,判斷短的字串是否長的字串的字串,如果是返回子串的首個字元的下標;如果否,則返回0.

注:長字串的第一元素為字元的長度。

2.演算法的關鍵:求next陣列

t為長字串

(1).[next陣列]: 當模式匹配串t失敗的時候,next陣列對應的元素指導用t串的哪個元素進行下一輪的匹配;

(2).字首:t[i],為固定的;

(3).字尾:t[j],為相對的,當前匹配元素的前乙個;

(4).匹配原則:

當t[i]==t[j]時,i++,j++,next[i]數值等於j;

不同,就j要回溯到next[j]的值開始;

(5)優化

如果發生失配時,字尾與前面的一致,退回到字首對應的next[i]對應的值;

**實現

void getnext(string t,int *next)

else

} if(j>t[0]) return i-t[0];

else return 0;

}

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前面是與主串匹配的,...