KMP算法求next數組
阿新 • • 發佈:2017-11-19
如果 位與 比較 spa 不同 align 驗證 style next數組
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數組的求解方法是:第一位的next值為0,第二位的next值為1。後面求解每一位的next值時,根據前一位進行比較。首先將前一位與其next值對應的內容進行比較,如果相等,則該位的next值就是前一位的next值加上1;如果不等,向前繼續尋找next值對應的內容來與前一位進行比較,直到找到某個位上內容的next值對應的內容與前一位相等為止,則這個位對應的值加上1即為需求的next值;如果找到第一位都沒有找到與前一位相等的內容,那麽需求的位上的next值即為1。
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)。
模式串 |
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 |
1.第一位的nextval值必定為0,第二位如果與第一位相同則為0,如果不同則為1。 2.第三位的next值為1,那麽將第三位和第一位進行比較,均為a,相同,則,第三位的nextval值為0。 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。
可在“aaaab”內進行驗證:
模式串 |
a |
a |
a |
a |
b |
next值 |
0 |
1 |
2 |
3 |
4 |
nextval值 |
0 |
0 |
0 |
0 |
4 |
KMP算法求next數組