KMP演算法實現(無縮排,基於C)

2021-10-10 20:48:14 字數 781 閱讀 2100

使用string字串進行資料儲存,串頭不需要計數字元總數,也就是不需要將所有字元後退一位。
設現字元s1=「s1,s2,s3....sn」為主串,s2="s1,s2,s3....sm"為匹配串,將s2串成為模式串,再s1中尋找完全等於s2的子串。next陣列儲存

s2每乙個元素失配時,可以可以讓s1從字串首回溯的個數。(預設各位理解next陣列含義)

void

getnext

(string s,

int next)

else

if(j ==1)

else j = next[j]

;//向前回溯,尋找當前值可能相同的回溯點

}}

int

kmp(string s1, string s2,

int next)

else

if(j ==0)

else}if

(j == s2.

size()

)//如果退出while時j指向最後乙個(因為最後乙個相等時,還執行了一次j++操作,所以比index大一),說明匹配成功了

return i ;

//返回匹配成功時主串最後乙個字元位置

else

return0;

}

ps:菜鳥的kmp學習日記 by 2020.11.25

by:aaa2同學

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