kmp演算法 next陣列解

2021-10-25 04:40:02 字數 855 閱讀 2092

kmp演算法 小白式學法

不需要指標回溯,並實現自由的主串,先直接上**

具體演算法過程

1)next陣列的求法主要在模式串的分析,分析如下:當模式串字元與主串字元不匹配時,我們平時的暴力解法是直接回溯主串的指標到初始位置,但是我們現在可以想利用我們主串和模式串已經匹配過的位置,通過模式串的部分匹配我們就知道了主串中失配前面的字元,利用我們已經知道的前面匹配的串串就可以找出next陣列。舉個例子:

以上我們發現第六個位置已經不匹配了,但是前面是匹配,我們可以看出(就是直接看,看模式串的第乙個位置是和主串第二個位置不匹配,,,一直比發現模式串第一,二位置和主串4,5位置一樣)直接讓 模式串的j指標回溯到3的位置,而主串的i指標不動(當然kmp 主串指標是不會回溯的哈哈),這就找出了next[6]=3。。之後的每個位置的next陣列都是如此找。當然next陣列值只和模式串有關(因為咱分析的就是主串和模式串匹配相同的串串,匹配相同當然就是模式串,不要被這裡的主串給迷惑)。當然這是手動模擬的思想,也還有另一種比較快捷的方法,預設next陣列0,1位置是0,1(這種情況就是初始預設陣列為1)或者(-1,0)。然後就是模式串中』字首『和』字尾『中共有元素的個數(也就是next陣列的值)舉個小李子吧就是(aba)字首是a,ab。字尾是a,ba,相同的是a,則計數為1,則next[4]=2。再看上方的例子(abaab)相同就是ab,則計數2,而next[6]=3。

2)而kmp演算法的主要實現是很簡單的,找出next陣列直接就是上**(就是開頭第一張圖)

KMP演算法 next陣列

通過上文完全可以對kmp演算法的原理有個清晰的了解,那麼下一步就是程式設計實現了,其中最重要的就是如何根據待匹配的模版字串求出對應每一位的最大相同前字尾的長度。我先給出我的 1 void makenext const char p,int next 214 next q k 15 16 現在我著重講...

KMP演算法 NEXT陣列

kmp和next陣列基本上是一起用的,有了next陣列,才有kmp演算法,講道理來說這兩個都是基於最大前字尾和,也就是說需要用到kmp的時候必須先把next陣列先求出來,next陣列就是由所匹配的word的每個子串的前字尾和最大匹配得到的,說實話next陣列的演算法給優化得已經很無解了,以至於至今我...

kmp演算法next例題 KMP演算法next陣列求解

kmp演算法與bf演算法的比較 bf演算法的想法十分樸素,即先將子串t的第一位與主串s的第一位對齊開始匹配,當不能匹配時將子串整體往後移一位,然後重新匹配,以此類推直至排出結果 如當遇到下圖所示情況時,需將子串整體後移一位,將i,j分別回溯到主串第2位和子串第一位。kmp演算法 對bf進行思考後,我...