KMP演算法詳解

2021-07-12 02:30:17 字數 976 閱讀 4848

kmp

演算法遇見很多次了,一沒有弄明白。

kmp

說起字串匹配,最直接的想法就是用兩次迴圈。時間複雜度大概是

o(m*n),

有沒有更高效的演算法和。

看下面的例子:

一般的匹配過程:

code:

* 暴力破解法

* @param ts 主串

* @param ps 模式串

* @return 如果找到,返回在主串中第乙個字元出現的下標,否則為-1

*/public static int bf(string ts, string ps) else

}if (j == p.length) else

}

但是這種匹配效率實在太低,大牛們是無法忍受這種低效的手段的。於是kmp演算法應運而生。利用已經部分匹配這個有效資訊,保持

i指標不回溯,通過修改

j指標,讓模式串盡量的移動到有效的位置。

這裡我們在暴力解法的基礎上進行改進,維護乙個陣列

int next, next[j] = k

,用來記錄當

t[i] != p[j]時,j

指標的下乙個位置。(可以先記下來)

這裡next [ ]陣列的獲得可以參考:1 (原創)詳解kmp演算法

2  演算法:kmp演算法解析

code:

public static int getnext(string ps)  else 

}return next;

}

最後的kmp演算法的**如下:

code:

public static int kmp(string ts, string ps)  else 

}if (j == p.length) else {

return -1;

KMP演算法詳解

模式匹配的kmp演算法詳解 這種由d.e.knuth,j.h.morris和v.r.pratt同時發現的改進的模式匹配演算法簡稱為kmp演算法。大概學過資訊學的都知道,是個比較難理解的演算法,今天特把它搞個徹徹底底明明白白。注意到這是乙個改進的演算法,所以有必要把原來的模式匹配演算法拿出來,其實理解...

KMP演算法詳解

kmp演算法即knuth morris pratt演算法,是模式匹配的一種改進演算法,因為是名字中三人同時發現的,所以稱為kmp演算法。因為偶然接觸到有關kmp的問題,所以上網查了一下next陣列和 nextval陣列的求法,卻沒有找到,只有在csdn的資料檔案裡找到了next陣列的簡單求法 根據書...

KMP演算法詳解

相信很多人 包括自己 初識kmp演算法的時候始終是丈二和尚摸不著頭腦,要麼完全不知所云,要麼看不懂書上的解釋,要麼自己覺得好像心裡了解kmp演算法的意思,卻說不出個究竟,所謂知其然不知其所以然是也。經過七八個小時地仔細研究,終於感覺自己能說出其所以然了,又覺得資料結構書上寫得過於簡潔,不易於初學者接...