next和nextval的求法

2021-09-05 12:19:02 字數 858 閱讀 5499

有的時候再學kmp演算法的時候我們第一步就被next和nextval嚇壞了,今天我來講一下我求next和nextval的方法和技巧,如有錯誤也希望大家及時指正。01

2345

6789

10字串ab

aacd

aaaa

bnext-10

0110

0111

1nextval-10

-1110

-1111

0next的求法:第乙個a的next值預設為-1,第二個b的預設值為0,從第三個元素開始,找以第乙個元素開始和與當前元素前乙個字元結尾的最長串的長度。比如第三個元素a(也就是頭上數字為2)的next為0,第四個元素的next為1,以此類推我們可以得到整個字串的next值。寫到這兒你可能會說,你的答案是錯的,別著急,聽我慢慢說說。

nextval的求法我們遵循乙個原則,那就是同變不同不變。其中第乙個元素的nextval值和他的next值一樣為-1,第二個元素是b,他的next值為0,0對應的元素為a,不同,即不變,nextval為0,同理第三個元素為a,a的next為0,0下面的就是a,相同,即變!將第三個元素的nextval值和剛剛比較的那個元素的nextval值保持一致。以此類推。

得到的next值和nextval值如下:

next-10

0110

0111

1nextval-10

-1110

-1111

0 正確結果與上表結果只差一步:

將**中的資料在原來的基礎上加1即可。

next01

1221

1222

2nextval01

0221

0222

1正確答案就到的啦

kmp中next和nextval的區別

模式匹配。kmp中next陣列表示如果當前匹配不成功,匹配串移動到的位置,不考慮移動到的位置的數與當前位置數的關係。kmp中nextval陣列表示如果當前匹配不成功,匹配串移動到的位置,考慮移動到的位置的數與當前位置數的關係。求next cpp view plain copy while i els...

關於KMP演算法中next和nextval的演算法思路

就是比較從0到當前值減一是否有相同值 即正著看和倒著看對比 最後結果加一。直接上圖 求abaabc的next值和aabaabaabaac的next值 留乙個小問題可以自己試著做一下,串 ababaaababaa 的next值為011234223456。nextval根據next值求,如果x位置和ne...

next陣列求法和KMP演算法

首先介紹什麼是next陣列 定義 next i 表示是子串s 0 i 的最長相等前字尾的字首的最後一位下標。認真理解不難 下圖給出了next陣列的定義計算 其中下框第一行是字首,下框第二行是字尾 注意字首和字尾可以部分重疊但是不能使是s 0 i 本身 很好理解這是必然因為字首和字尾都是本身,比較毫無...