KMP演算法C 實現

2021-06-27 19:08:59 字數 688 閱讀 1674

kmp演算法事模式匹配的高效演算法,**很少,但是卻不是很容易理解。這幾天剛好做了一些這方面的調研,寫了乙個c++實現版本的kmp演算法,貼出來亮亮。

其實kmp演算法最重要的部分是next陣列的計算方法,這裡有一篇講解得非常到位的文章

而再計算完next陣列之後實現模式的匹配就簡單多了,基本得策略與計算next陣列得方法是一致的。好了不多說了,貼**。

#ifndef helloworld_kmp_h

#define helloworld_kmp_h

class kmp

/**str原始字串

*需要查詢的字串

*/int findsubstr(char *str,char* pattern)

{int *next = new int[strlen(pattern)];

getnext(pattern,next);

int i=0;

int len = (int)strlen(str);

int j = 0;

while(i

#include #include "kmp.h"

using namespace std;

int main(int argc, const char * argv) {

// insert code here...

kmp kmp;

cout<

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指標,而是利用已經得到的 部分匹配 結果將模式向右 滑動 盡可能遠的...

c 實現KMP演算法

題目 首先讀進乙個包含10000個英文單詞的檔案,然後接受使用者輸入的模式字串,開始匹配檔案中該模式串出現了多少次。實現使用kmp實現,先根據模式串生成next陣列,然後在對每一行文字進行kmp匹配。將結果列印出來 include include include include using name...