演算法4 7 KMP演算法中的模式串移動陣列(c語言)

2021-08-31 03:59:18 字數 568 閱讀 4321

題目描述

字串的子串定位稱為模式匹配,模式匹配可以有多種方法。簡單的演算法可以使用兩重巢狀迴圈,時間複雜度為母串與子串長度的乘積。而kmp演算法相對來說在時間複雜度上要好得多,為母串與子串長度的和。但其算符比較難以理解。

在kmp演算法中,使用到了乙個next陣列。這個陣列就是在比較失配時母串指標不必回溯,而子串指標移動相應位置即可。我們給出書中next陣列的算式表示以及演算法,請你實現之。

圖1:next陣列的算式表示

圖2:next陣列的演算法表示

輸入描述

乙個模式串,僅由英文小寫字母組成。長度不大於100。

輸出描述

輸出模式串對應的移動陣列next。每個整數後跟乙個空格。

輸入樣例

abaabcac

輸出樣例

0 1 1 2 2 3 1 2

#include#includeint main()

else

j = next[j];

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

printf("\n");

}}

串的模式匹配演算法 KMP演算法

這個演算法理解起來有點難受,建議看下簡單的串模式匹配演算法bf演算法刷下經驗,如上鏈結。相比於brute force bf演算法 每當一趟匹配出現字元不等時,不需要回溯i指標 目標串指標 並且模式串指標j將從已經得到的部分匹配模式盡可能後移,從而降低時間消耗。o n m bf演算法為o n m 對於...

演算法 串的模式匹配演算法(KMP)

串的模式匹配演算法 問題 求子串位置的定位函式如何寫?int index sstring s,sstring t,int pos 給定串s,子串t,問t在s中從pos位開始第一次出現的位置是?我沒有使用字元陣列或者string,而是自己實現sstring,這其實是資料結構作業 s 0 中存放的是串的...

KMP 模式串匹配演算法

這兩天讀了july的kmp,覺得很受益,寫下以作備忘。kmp最重要的就是求出next陣列,而next陣列則是通過不斷比較 str2 k 與 str2 j 來確定下乙個字元對應的 next數值 相等則直接next j k 不相等則令k next k 進行遞推直到出現 str2 k str2 j 相等的...