Kmp中next陣列含義

2021-08-21 10:20:35 字數 861 閱讀 8740

這篇分析了kmp中next陣列到底是用來幹什麼的。文章假定大家已經對字串匹配演算法具有初步了解。但是對kmp中的next不是很懂。如果想要研究更多。可以出門左轉這篇寫的很詳細。

學過kmp都知道,下面這個串。

目標串s:abdababxqweqwer

模式串t:abdababy

應該移動到如下

abdababxqweqwer

11111abdababy

而不是abdababxqweqwer

111abdababy

我們發現中間那個小老弟ab雖然跟前字尾一樣但是移過去後發現它是個錯誤的位置。這是因為目標串中間的ab到末尾是abab,但模式串開頭是abda,所以移動過去後發現它倆配不上,換言之,如果中間的ab是正確的位置,的充要條件就是中間中間的ab到結尾應該等於模式串的開頭。而這句話你在品品,ab到結尾是個啥,可不就是字尾嗎。所以說這就證明了,如果奇蹟有顏色一定是中國紅,呸。如果有個?是正確的位置那它肯定是個跟字首相等的字尾。所以這種前字尾是ab中間還有ab也不用擔心,只管字尾就行了,因為中間那個ab如果是正確能跳轉的位置,肯定會納入字尾裡面,如果沒納入,那就說明它不是。

其實就是個逆否命題

因為:if 那個位置是能匹配的位置 then 那個位置是前字尾

所以:if 那個位置不是前字尾 then 那個位置不是能匹配的位置

KMP演算法中的next 陣列

kmp演算法最難懂的就是next陣列的求法。位置i01 2345 6789 1011 1213 1415 字首next i 00 0012 3123 4567 40子串a gcta gcag ctag ctg 申明一下 下面說的對稱不是中心對稱,而是中心字元塊對稱,比如不是abccba,而是abca...

KMP演算法中next陣列解析

接上篇 next 陣列 主要記錄 子串 的 每乙個字首 按順序 的 最長匹配真前字尾 的長度。這裡講一下 求解原理。陣列從零開始,第乙個數 1 代表不存在 有的以 0 為起點代表空,這不矛盾,全加1 即為此格式 此陣列是一點點增長的,下乙個資料依賴之前的資料。舉例子來描述原理 當新的最後乙個字母過來...

KMP中next陣列的理解

1231231234 當匹配到4的時候突然失配了,那麼我們就找兩個串,以個是以第乙個開頭,另乙個是以4前面的那個3結尾,可以相交但不可以完全相交,得到的就是123123 123123,那麼當4失配的時候就直接跳到第二個3後後面的那個1比較就行了,因為當前的這個失配點的前乙個點為尾的串和以第乙個點為起...