KMP演算法的研究

2022-10-09 21:24:16 字數 964 閱讀 8263

前腳學後腳忘,是時候給自己通俗易懂的總結一下了

在電腦科學中,knuth-morris-pratt字串查詢演算法(簡稱為kmp演算法)可在乙個字串s內查詢乙個詞w的出現位置。乙個詞在不匹配時本身就包含足夠的資訊來確定下乙個匹配可能的開始位置,此演算法利用這一特性以避免重新檢查先前配對的字元。

這個演算法由高德納和沃恩·普拉特在2023年構思,同年詹姆斯·h·莫里斯也獨立地設計出該演算法,最終三人於2023年聯合發表。

——wiki

在兩個串匹配的過程中,當前一段匹配都相符合的時候,下乙個元素匹配失敗(兩個串的指標分別到了i和j+1),這時候如果直接按照暴力做法返回到串頭來重新進行匹配會增加時間複雜度,並未能利用到在兩個指標前面一段已經匹配好的串。kmp的作用就是將最大的相同字首字尾長度儲存下來,以用來節省匹配時間,如果下乙個元素匹配失敗,那麼可以將最大的相同字首移到原來字尾的位置,那麼相當於這一部分字首就省去了匹配的過程,極大的降低了複雜度。

next陣列既可以理解為儲存了當前下標下的相同最大字首的最後乙個元素的下標,也可以理解為儲存了在當前下標之前的最大前字尾相同子串的長度,如圖所示

//kmp匹配

for(int i=1, j=0;i<=m;i++)

}return 0;

}

KMP 演算法研究

定義 1 next 0 1 意義 任何串的第乙個字元的模式值規定為 1。2 next j 1 意義 模式串 t中下標為 j的字元,如果與首字元 相同,且 j的前面的 1 k個字元與開頭的 1 k個字元不等 或者相等但 t k t j 1 k 如 t abcabcad 則next 6 1 因t 3 t...

KMP演算法研究

本人愚笨,csdn上看了很多解法都不了解,而且很多解法都有些問題。自己看了書研究了乙個晚上才大概明白了這一原理。特此附上自己寫的解法和見解。kmp是對於字串匹配蠻力解法的乙個改進,原理就是在求出模式子串自己內部的重複模式,舉個簡單的例子,主串s ababaababcb 子串t ababc t 0 t...

KMP演算法研究(一)

t 主串 w 模式串 next i 模式串中從第1個字元到第i 1個字元構成的子串的最大字首字尾相等數目。kmp演算法主要是功能便是判斷模式串是否出現在主串中,並找出相應的出現位置。而在常規的暴力破解演算法中,通常採用順序比對的方法進行查詢,也就是將模式串依次與主串的第1 2 3.個字元比較,直到找...