KMP演算法的C 實現

2021-09-06 14:41:20 字數 934 閱讀 8088

這個問題阮一峰老師講的很清楚,鏈結

這裡我只貼一下我的c++實現**:

#include #include 

#include

#include

#include

using

namespace

std;

void buildpatchmatchtable(int *partmatchtable, char *findstr)

setpostset;

string tmppost = ""

; tmppost =findstr[i];

postset.insert(tmppost);

for(int j = i - 1; j > 0; --j)

setcomset;

for(set

::iterator beg = preset.begin(); beg != preset.end(); ++beg)

int maxlen = 0

;

for(set

::iterator beg = comset.begin(); beg != comset.end(); ++beg)

partmatchtable[i] =maxlen;

}}

int kmp(char *srcstr, char *findstr)

else

}if(curfind ==lenfind)

}return -1

; delete partmatchtable;

}int

main()

關鍵問題

1. 求出部分匹配值表

2. 移動次數= 已匹配個數 - 最後乙個匹配的字元的部分匹配結果

KMP演算法c 實現

遞推求解next陣列,初始的情況是next 0 1.假設在某乙個時刻有如下的等式成立 str 0.k 1 str j k.j 1 那麼next j k,在這個前提下,繼續進行下乙個字元的匹配.1 如果str 0.k str j k.j 那麼next j 1 next j 1 k 1.2 反之,如果上...

KMP演算法C實現

這種演算法是d.e.knuth 與v.r.pratt和j.h.morris同時發現的,因此人們稱為kmp演算法。此演算法可以在o n m 的時間數量級上完成串的模式匹配操作。其基本思想是 每當匹配過程中出現字串比較不等時,不需回溯i指標,而是利用已經得到的 部分匹配 結果將模式向右 滑動 盡可能遠的...

KMP演算法C 實現

kmp演算法事模式匹配的高效演算法,很少,但是卻不是很容易理解。這幾天剛好做了一些這方面的調研,寫了乙個c 實現版本的kmp演算法,貼出來亮亮。其實kmp演算法最重要的部分是next陣列的計算方法,這裡有一篇講解得非常到位的文章 而再計算完next陣列之後實現模式的匹配就簡單多了,基本得策略與計算n...