KMP模式匹配演算法

2021-10-05 05:44:30 字數 649 閱讀 3192

kmp匹配演算法,相比樸素匹配演算法,可以大大避免重複遍歷的情況。kmp匹配演算法在匹配不相同時,不是重新返回開始處進行比較,而是退回盡可能遠的字串位置在進行比較,這樣可以大大減少重複比較。

kmp匹配演算法關鍵在於求出串應該退回的地方,在kmp匹配演算法中,定義了乙個next陣列進行記錄串應該返回的地方。next陣列的長度為子串的長度,其推導方法為:

求next陣列**為:

求next陣列其實就相當於求前幾個字元的最大的相同的前字尾,進而減少匹配的次數。

kmp演算法僅當字串與主串存在許多部分匹配時才會有其優勢,否則與樸素匹配演算法之間差異並不明顯。

其中next陣列可以進一步改進,在原next陣列中仍有很多無用的比較,可以進一步優化,**如下:

對於串t=「ababaaaba「,原next陣列值為「001123112」,改進後的next陣列值為「001013101」.

模式匹配 KMP演算法

字串匹配演算法 include includeusing namespace std define ok 1 define error 0 define overflow 2 typedef int status define maxstrlen 255 使用者可在255以內定義最長串長 typed...

模式匹配KMP演算法

前些日子在為目前該學習什麼而苦惱,就問了一下已經從事多年軟體開發的表哥,他說乙個程式設計師要走的遠,就要學好資料結構和演算法,於是我就重新開始學習資料結構和演算法了 拿起以前上過的資料結構看,看到第四章串的模式匹配時,頗感興趣,就寫了一下程式,實踐了一下。感覺還蠻爽,於是就把以下幾個重要的函式放在此...

KMP模式匹配演算法

首先,這是由knuth morris和prattle三人設計的線性時間字串匹配演算法。這裡就不仔細的講解,網上有更好的講解,在這推薦幾個自己當時學習的kmp所看到的較好理解的 這裡附上自己所學的 includeusing namespace std s 是主串 p 是模式串 int next 100...