C語言 模式匹配(KMP演算法)

2021-10-05 08:30:14 字數 1286 閱讀 3726

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...