kmp算法中的next數組實例解釋


假設求串′ababaaababaa′的next數組

模式串 a b a b a a a b a b a a
下標 1 2 3 4 5 6 7 8 9 10 11 12

1、前兩位:next數組前兩位一定是0,1 即前兩位ab對應的next數組為01,則:

模式串 a b a b a a a b a b a a
下標 1 2 3 4 5 6 7 8 9 10 11 12
next數組 0 1                    

2、接下來看第三位,按照next數組求解方法。第三位a的前一位為第二位的b,b的next值為1對應內容為a,b與a不同,向前繼續尋找next值對應的內容來與前一位進行比較。因為找到第一位都沒有找到與前一位相等的內容,所以第三位a的next值為1,則:

模式串 a b a b a a a b a b a a
下標 1 2 3 4 5 6 7 8 9 10 11 12
next數組 0 1 1                  

3、接下來看第四位b,b的前一位a的next值1對應內容為a,相同,所以該位b的next值就是前一位a的next值加上1,即為2

模式串 a b a b a a a b a b a a
下標 1 2 3 4 5 6 7 8 9 10 11 12
next數組 0 1 1 2                

4、接下來看第五位a,a的前一位b的next值2對應內容為b,相等,所以該位a的next值就是前一位b的next值加上1,即為3

模式串 a b a b a a a b a b a a
下標 1 2 3 4 5 6 7 8 9 10 11 12
next數組 0 1 1 2 3              

5、接下來看第六位a,a的前一位a的next值3對應內容為a,相等,所以該位a的next值就是前一位a的next值加上1,即為4

模式串 a b a b a a a b a b a a
下標 1 2 3 4 5 6 7 8 9 10 11 12
next數組 0 1 1 2 3 4            

6、接下來看第七位a,a的前一位a的next值4對應內容為b,不相等,向前繼續尋找next值對應的內容來與前一位進行比較,b的next值2對應的內容為b,依舊不相等,繼續向前尋找,第二位b的next值1對應內容為a,相等。因為是在第二位b處實現的相等,所以第七位a的next值為第二位b的next值上加1,即為2

模式串 a b a b a a a b a b a a
下標 1 2 3 4 5 6 7 8 9 10 11 12
next數組 0 1 1 2 3 4 2          

7、接下來看第八位,同樣道理,得出b的next值為2

模式串 a b a b a a a b a b a a
下標 1 2 3 4 5 6 7 8 9 10 11 12
next數組 0 1 1 2 3 4 2 2        

8、接下來看第九位,前一位b的next值2對應內容為b,相等,所以此處next值為3

模式串 a b a b a a a b a b a a
下標 1 2 3 4 5 6 7 8 9 10 11 12
next數組 0 1 1 2 3 4 2 2 3      

9、第十位同理可得,為4

模式串 a b a b a a a b a b a a
下標 1 2 3 4 5 6 7 8 9 10 11 12
next數組 0 1 1 2 3 4 2 2 3 4    

10、第十一位a的前一位b的next值4對應內容為b,相等,所以此處next值為5

模式串 a b a b a a a b a b a a
下標 1 2 3 4 5 6 7 8 9 10 11 12
next數組 0 1 1 2 3 4 2 2 3 4 5  

11、最后,第十二位同理可以得到next值位6

模式串 a b a b a a a b a b a a
下標 1 2 3 4 5 6 7 8 9 10 11 12
next數組 0 1 1 2 3 4 2 2 3 4 5 6

綜上,串′ababaaababaa′的next數組為011234223456


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM