c 實現kmp演算法

2021-09-24 21:18:47 字數 851 閱讀 4893

1.獲取next陣列

1.1初始化 !!很重要!!

這樣初始化的原因是因為自身和自身比較

第一位的next預設為-1 不需要再比較 所以k=-1

執行獲得next陣列函式時 能讓j跳到1

next[0] = -1;//第乙個字元的next預設為-1

k = -1;//前置移動的指標預設為-1

j = 0;//後置從0開始移動

1.2獲取next陣列

while (j != plen)//當j還不等於子串長度時 說明還沒有比較完

else//當前后位不相等是 k跳回之前的next再次進行比較

}

2.比較子串和母串

2.1 初始化 同樣很重要

這樣初始化是為了從i,j位就開始比較

如果j設為-1 則i=0這位沒有和子串比較

i = 0;//代表母串初始位

j = 0;//代表子串出示微博

2.2比較

while (i3.輸出母串比較成功的位置

if (j == plen)//說明子串已經比較完 查詢成功

else//說明母串比較完 但子串未比較完 說明沒有找到

else

}for (i = 0; i < plen; i++)

i = 0;

j = 0;

while (ielse

}if (j == plen)

else

return 0;

}

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...