kmp演算法是一種改進的字串匹配演算法,由d.e.knuth,j.h.morris和v.r.pratt提出的,簡稱kmp演算法。kmp演算法的核心是利用匹配失敗後的資訊,儘量減少模式串與主串的匹配次數以達到快速匹配的目的。具體實現就是通過乙個next()函式實現,函式本身包含了模式串的區域性匹配資訊。
kmp演算法是建立在bf演算法基礎上的,kmp演算法與bf演算法的最大區別在於,bf演算法只能一位一位匹配,而kmp演算法能夠省去不必要的匹配步驟,從而實現跳位的匹配(具體如何跳位,看下圖演示)。
}}看到這裡你可能會想到,kmp演算法是通過記錄模式串t中的重複資料資訊,來達到跳步,那麼如果模式串t中沒有相匹配的前字尾呢?如:「abcdef」那kmp演算法還能發揮作用嗎?
待補充…
#include
#include
#define maxsize 100
void
nextval
(char t,
int*next)
else
}else}}
intkmp
(char s,
char t)
else}if
(j==lent)
else
}int
main()
參考:
從頭到尾徹底理解
詳解kmp演算法
部分文圖來自於:懶貓老師
《資料結構 第二版》,嚴蔚敏 & 吳偉民編著;
KMP演算法(快速模式匹配演算法)c語言
傳統的bf演算法容易理解且實現,但是查詢效率不高,kmp本身不複雜,關鍵在於next陣列的構建,但網上絕大部分的文章把它講混亂了。下面,我們闡述kmp的流程 步驟 next 陣列的簡單求解 遞推原理 求解,希望更多的人不再被kmp折磨或糾纏,不再被一些混亂的文章所混亂。kmp演算法的核心,是乙個被稱...
KMP演算法與樸素模式匹配演算法(C語言)
include define ok 0 define error 1 define failed 1 int readfile char buffer fseek fp,0,seek set fseek fp,0,seek end length ftell fp buffer char malloc...
模式匹配 KMP演算法
字串匹配演算法 include includeusing namespace std define ok 1 define error 0 define overflow 2 typedef int status define maxstrlen 255 使用者可在255以內定義最長串長 typed...