KMP算法:next和nextval值計算


KMP算法的next和nextval值計算

 

先看看next數據值的求解方法

例:下標從1開始(若題中給定下標為0開始,把所有值-1即可)

next數組的求解方法:根據前一個字符next,一直循環找到第一次匹配成功的下標,並把next=1;如果當前字符與下標1字符都不相同,next值就為1(初始下標值)

第一位為0,第二位為1,

第三位:把前一個模式串字符b與下標next值所對應的字符比較,b 和a不同,next為1(初始下標值)

第四位:前一個,c   c和a不同,next為1

第五位:a和a相同(下標為1)1+1=2

第六位:b和b相同(下標為2)2+1=3

第七位:a和c不同(下標為3),繼續找,c下標為1,a和a相同(下標為1) 1+1=2

 

nextval數組求解方法:根據next數組的值作為下標找到第一個不同的字符,把它的下標作為nextval的值;否則繼續循環比較,直到與第一個字符也相同,此時,nextval值為0

第一位為0,第二位為1,

第三位:(當前下標字符)c與a(next值1作為下標的字符進行比較),若不同則為初始下標值1

第四位: a和a相同(第一個字符),nextval值為0

第五位:b和b(下標為2),相同,繼續比較,b的next為1,b和下標為1的比,即b和a比,不同,則nextval值為1

第六位:a和c(下標為3),不同,nextval為下標的值 3

第七位:a和b(下標為2),不同,nextval為下標的值 2

注:如果下標從0開始,只需把所有的next和nextval值-1就是


免責聲明!

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



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