快速KMP演算法

2021-07-24 18:14:04 字數 933 閱讀 1202

bf演算法是普通的模式匹配演算法,bf演算法的思想就是將目標串s的第乙個字元與模式串p的第乙個字元進行匹配,若相等,則繼續比較s的第二個字元和p的第二個字元;若不相等,則比較s的第二個字元和p的第乙個字元,依次比較下去,直到得出最後的匹配結果。

**實現如下:

int bfmatch(char *s,char *p){

int i,j;

i=0;

while(i

kmp演算法是一種改進的字串匹配演算法,又稱它為克努特--莫里斯--普拉特操作(簡稱kmp演算法)。kmp演算法的關鍵是利用匹配失敗後的資訊,儘量減少模式串與主串的匹配次數以達到快速匹配的目的。具體實現就是實現乙個next()函式,函式本身包含了模式串的區域性匹配資訊。

在kmp演算法中,為了確定在匹配不成功

時,下次匹配時j的位置,引入了next陣列,next[j]的值表示p[0...j-1]中最長字尾的長度等於相同字串行的字首。

對於next陣列的定義如下:

1) next[j] = -1  j = 0

2) next[j] = max(k): 03) next[j] = 0  

即next[j]=k>0時,表示p[0...k-1]=p[j-k,j-1]

因此kmp演算法的思想就是:在匹配過程稱,若發生不匹配的情況,如果next[j]>=0,則目標串的指標i不變,將模式串的指標j移動到next[j]的位置繼續進行匹配;若next[j]=-1,則將i右移1位,並將j置0,繼續進行比較。

**實現如下:

int kmpmatch(char *s,char *p){

int next[100];

int i,j;

i=0;

j=0;

getnext(p,next);

while(i

快速模式匹配演算法(KMP)

恐怕現在用過電腦的人,一定都知道大部分帶文字編輯功能的軟體都有乙個快捷鍵ctrl f 吧 比如word 這個功能主要來完成 查詢 替換 和 全部替換 功能的,其實這就是典型的模式匹配的應用,即在文字檔案中查詢串。1.模式匹配 模式匹配的模型大概是這樣的 給定兩個字串變數s和p,其中s成為目標串,其中...

KMP演算法 快速求解next陣列

在kmp演算法中,最關鍵的就是求解next陣列了。那麼如何快速求解next陣列呢?已知模式串 ab cdabdd a 其next陣列 00 0 0 12 0 0 1 那麼是如何求證出來的呢?首先字串從左至右遍歷。第乙個字元a的next陣列對應元素為0,第乙個字元a和第2個字元b比,不相等。b 0 表...

KMP演算法(快速模式匹配演算法)c語言

傳統的bf演算法容易理解且實現,但是查詢效率不高,kmp本身不複雜,關鍵在於next陣列的構建,但網上絕大部分的文章把它講混亂了。下面,我們闡述kmp的流程 步驟 next 陣列的簡單求解 遞推原理 求解,希望更多的人不再被kmp折磨或糾纏,不再被一些混亂的文章所混亂。kmp演算法的核心,是乙個被稱...