KMP算法計算next值和nextVal值


KMP算法:

給定一個主串S及一個模式串P,判斷模式串是否為主串的子串;若是,返回匹配的第一個元素的位置(序號從1開始),否則返回0;

這里先不寫算法,僅僅計算next和nextVal值

那么計算時只用到子串,也就是模式串

這里模式串為:abaabcac

第一步將模式串寫上序號,我們這里從1開始(有的從0開始,建議充1開始)

 

 

 然后計算出maxL值,列出從第一個開始的子串,找出相等的前綴和后綴的個數

如果2>看不懂的話,看3>,

2>計算maxL值

 

所以maxL值

 

 

 

 

 如果這個看不懂的話, 看下面的3>

3>, 如果2>看懂了這個就不用看了

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 依次類推

4>計算next值

 

 

接下來將maxL復制一行,去掉最后一個數,在開頭添加一個-1,向右平移一個格,然后每個值在加1的到next值

 

 

 

 

 5>計算nextVal值,首先將第一個為0,然后看next和maxL是否相等(先計算不相等的)

當next和maxL不相等時,將next的值填入

 

 

當next和maxL相等時,填入對應序號為next值得nextVal值

 

 

 

 

 

 所以整個nextVal值為:

 

 

 



 


免責聲明!

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



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