KMP演算法感悟

2021-08-07 13:18:25 字數 784 閱讀 9383

學了幾天kmp演算法。開始覺得有點難懂,但是堅持下來了,最終搞明白了,還是蠻開心的。

所以寫點kmp演算法的感悟

1:next陣列只和模式串本身有關和文字串是無關的,因為next表示的是當匹配失敗後模式串要回溯到哪個位置。

2:next陣列儲存的資料是用來當模式串與主串不匹配的時候要模式串回退到第幾個字元與主串再重新匹配,我們知道kmp演算法的主串是不回朔的,當不匹配的時候我們不是退回到開始位置重新匹配,而是利用已經匹配的結果將模式串回朔到下乙個位置,這個位置比開始位置更近一步;

簡單的說就是next[ j ]的值儲存的是當模式串中第 j 個字元與主串第 i 個字元不匹配時候,模式串中的哪個字元 重新與主串第 i 個再匹配,這樣總的字元比較次數比從開始位置比較的次數就少了。

3:next[j]儲存的就是模式串前j個字元裡字首和字尾最大的匹配長度;也就是有j = next[j] ; 假設有模式串「abcabx」,那麼next[5] = 2就是前5個字元裡字首和字尾匹配最長的長度為2即「ab」;那麼就是說如果next[len] = ans , 整個串的字首和字尾最長匹配的長度就是ans,上面的字串「abcabx」的最長匹配就是0。

4:在模式串與標準串進行匹配時,指向他們的指標分別為j、i;當p[j]!=s[i]時,j直接變為next[j],新的p[j]繼續與s[i]比較,如果不相等繼續進行此操作……那麼陣列next[j]同樣反映了,在模式串p的第j個位置之前,p[0]~p[next[j]-1]與p[i-next[j]]~p[i-1]這兩段是完全一樣的。

KMP演算法 感悟

先說下我的教材 資料結構 c語言描述 耿國華 主編 第四章 串 其中有個模式匹配演算法,一般的演算法看懂之後,在網上找了kmp演算法看,看了老長時間才看明白,真高興,和大家分享下 define maxlen 40 include include typedef struct sstring int ...

KMP演算法個人感悟

既然來到了這,那也一定是被kmp困惑了一陣的小夥伴。雖然這篇文章也不一定讓你能看懂,但是這算是我自己個人對於kmp的最直接的理解,也許不好,也許有誤,望大佬指出。對於串的模式匹配的演算法很多,當然最簡單就是暴力破解法 也即是bf演算法 由此我們從這開始引入 bf演算法原理就是將主串和模式串依次進行比...

演算法 KMP演算法

kmp演算法主要解決的問題就是在字串 主串 中的模式 pattern 定位問題。記主串為t,模式串為p,則kmp演算法就是返回p在t 現的具體位置,如果沒有出現則返回 1。如果 i 指標指向的字元和 j 指標指向的字元不一致,那麼把 i 右移1位,j 從0位開始,從新開始匹配 如果 i 指標指向的字...