next nextval

1 KMP算法中next與nextval值的計算算法

以上兩張圖表明瞭next值的求法,本人總結後作以下敘述:數組

根據公式可知:spa

next[1]=0code

next[2]=1方法

next[3]的求法根據公式能夠直接求出,但比較麻煩,網上也有不少說法,大同小異都是根據公式進行敘述,本人認爲2之後的next值能夠直接對串進行比較得出,每次從第一位開始和最後一位開始比較,依次一、2位與n-一、n位比較,而後一、二、3與n-二、n-一、n位進行比較,如有串相等,則得出最長串的長度,並加上1即便next值im

如下的文字是從網上摘錄,求nextval的思路總結

nextval數組的求解方法是:nextval[1]=0。從第二位開始,若要求nextval[i],將next[i]的值對應的位的值與i的值進行比較(例如,第i爲的值爲'b',next[i]=3,則將i的值'b'與第三位的值進行比較),若相等,nextval[i]=nextval【next[i]】(例,nextval[i]=nextval[3]);若不相等,則nextval[i]=next[i](例,nextval[i]=next[i]=3)。next

1.第一位的nextval值一定爲0,第二位若是於第一位相同則爲0,若是不一樣則爲1。img

2.第三位的next值爲1,那麼將第三位和第一位進行比較,均爲a,相同,則,第三位的nextval值爲0。co

3.第四位的next值爲2,那麼將第四位和第二位進行比較,不一樣,則第四位的nextval值爲其next值,爲2。

4.第五位的next值爲2,那麼將第五位和第二位進行比較,相同,第二位的next值爲1,則繼續將第二位與第一位進行比較,不一樣,則第五位的nextval值爲第二位的next值,爲1。

5.第六位的next值爲3,那麼將第六位和第三位進行比較,不一樣,則第六位的nextval值爲其next值,爲3。

6.第七位的next值爲1,那麼將第七位和第一位進行比較,相同,則第七位的nextval值爲0。

7.第八位的next值爲2,那麼將第八位和第二位進行比較,不一樣,則第八位的nextval值爲其next值,爲2。

模式串   a b a a b c a c

next值  0 1 1 2 2 3 1 2

nextval 0 1 0 2 1 3 0 2
相關文章
相關標籤/搜索