kmp演算法總結

2021-08-21 19:54:54 字數 729 閱讀 6731

kmp演算法總結

kmp演算法,是一種減少字串匹配時複雜度的演算法,本演算法減少了兩個字串遇到不相等的情況是的匹配次數,也就是減少了主串的回溯次數,跳過了不必要的匹配,使原來的m*n的時間複雜度變成了m+n。

kmp演算法大致分為兩個部分:

next陣列,next陣列記錄了模式串字首字尾的長度,求模式串的next陣列是使用kmp演算法的前提,也是根本,next陣列的求法:首先定義乙個函式,將所求模式串傳遞進去,規定next陣列的第乙個值next等於零,然後設兩個下標i和j,i控制next陣列的下標,j控制next陣列的值,首先讓i=1,j=0然後比較對應字元是否相等,相等的話,兩個下標同時加一並且next【i】等於j+1,不相等的話更新如果j的值等於零i++而j不變,如果j大於零的話,j返回上乙個next【j-1】的值,以此類推直到找到最後乙個字元的next陣列的值。

2:字串的匹配

求出next陣列之後就要進行兩個字串之間的匹配了,首先從第乙個字元開始比較,設兩個下標i和j都為零,然後如果主串下標為零時對應字元與模式串不相等,則主串下標加一,而模式串下標不變,如果主串下標不為零,且對應字元與模式串不想等時模式串的下標回溯到上乙個next陣列的值所對應的位置,減少了不必要的匹配,然後如果模式串與主串對應字元相等時,則兩個字串的下標同時加一,最後匹配到兩個字串任意乙個字串的結尾時,匹配結束.

kmp的演算法的實現這兩步是基礎,對解決一些時間有規定的字串比較的題非常有幫助。

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演算法總結

現在假設有兩個字串a bbc abcdab abcdabde,b abcdabd。現在要在a中找b。比較暴力的方法是直接搜尋 void gosearch 上述 最核心就是while迴圈,舉兩個例子說明其作用 還是選取b串作為說明。假設現在要求next 6 那麼當前的j next 5 1 next陣列...