對KMP演算法理解

2021-06-19 04:01:48 字數 629 閱讀 8321

kmp演算法是一種在乙個字串中匹配另乙個字串的高效演算法。簡單字元的匹配演算法時間複雜度為o(m*n);kmp演算法的時間複雜度為o(m+n)。

下面是我在vs上的求next值驗證演算法。

#include "abc.h"

#include

using namespace std;

int main()

;unsigned int j;

next[0]=-1;

j=0;

k=-1;

while(jfor(int k=0;k<8;k++)

coutsystem("pause");

return 0;}

對於串abaabcdc,其next值,實際上就是當前字元與第乙個字元的」重複度「,重複度是指該字元算起之前子串,與第乙個子符起,能匹配的個數,如第乙個c,c之前有「ab」而在abaabcdc中,第乙個a開始,也有「ab」成功匹配了「ab」,即匹配了二個字元,所以該字元的next值為2。特別的,第乙個字元的next值取-1。

這樣,當字元搜尋到第乙個c不匹配時,在右移1的基礎上,再加上next的移動值,即3。這樣會向右移動三個字元,從而跳過比較'ab',因為前面ab是重複的,不需要再次比較,從而省略了二個比較的時間,提高了字串的搜尋效率。

KMP演算法理解

kmp演算法的理解著實花了不少時間,幸好網上前輩的部落格寫得都相當好,結合幾篇部落格仔細想想還是可以理解的,這裡僅做一下整理。kmp演算法概念理解看這篇部落格就夠了字串匹配的kmp演算法by阮一峰 主要的邏輯那篇部落格都有講,求出next陣列,進行簡單的加減即可完成匹配。至於求解next陣列,則是k...

kmp演算法理解

宣告 下面兩段 摘自 結構之法 演算法之道 博主july大神的部落格。這裡,我只標記和注釋一下 算是自己的學習心得吧。優化過後的next 陣列求法 void getnextval char p,int next else 求next陣列,初始時 next 0 1,這個是固定的,k為當前最新求得的最長...

KMP演算法理解

kmp演算法是對普通模式匹配演算法的一種改進演算法,這種改進演算法是d.e.knuth與v.r.pratt和j.h.morris同時發現的,因此人們稱它為kmp演算法。kmp演算法最大的特徵就是引進了跳轉表 next表 下面我們來說說kmp演算法與普通演算法的區別。這裡我們先提乙個已知條件 目標串 ...