數據結構KMP算法中next函數的求解思想及其解釋

一、算法描述:第一位的next值爲0,第二位的next值爲1,後面求解每一位的next值時,根據前一位進行比較。首先將前一位與其next值對應的內容進行比較,如果相等,則該位的next值就是前一位的next值加上1;如果不等,向前繼續尋找next值對應的內容來與前一位進行比較,直到找到某個位上內容的next值對應的內容與前一位相等爲止,則這個位對應的值加上1即爲需求的next值;如果找到第一位都沒有找到與前一位相等的內容,那麼需求的位上的next值即爲1。
二、解釋以及具體實現:

先看看next數據值的求解方法
位序       1   2   3   4   5   6   7   8
模式串     a   b   a   a   b   c   a   c
next值     0   1   1   2  2   3  1   2

next數組的求解方法是:
1.第一位的next值爲0
2.第二位的next值爲1
後面求解每一位的next值時,根據前一位進行比較
3.第三位的next值:第二位的模式串爲b ,對應的next值爲1;將第二位的模式串b與第一位的模式串a進行比較,不相等;則第三位的next值爲1
4.第四位的next值:第三位的模式串爲a ,對應的next值爲1;將第三位的模式串a與第一位的模式串a進行比較,相同,則第四位的next值得爲2
5.第五位的next值:第四位的模式串爲a,對應的next值爲2;將第四位的模式串a與第二位的模式串b進行比較,不相等;第二位的b對應的next值爲1,則將第四位的模式串a與第一位的模式串a進行比較,相同,則第五位的next的值爲2
6.第六位的next值:第五位的模式串爲b,對應的next值爲2;將第五位的模式串b與第二位的模式中b進行比較,相同,則第六位的next值爲3
7.第七位的next值:第六位的模式串爲c,對應的next值爲3;將第六位的模式串c與第三位的模式串a進行比較,不相等;第三位的a對應的next值爲1,則將第六位的模式串c與第一位的模式串a進行比較,不相同,則第七位的next值爲1
8.第八位的next值:第七位的模式串爲a,對應的next值爲1;將第七位的模式串a與第一位的模式串a進行比較,相同,則第八位的next值爲2
以上這種分析方法,位序是從1開始的,如果位序從0開始,剛第一位的next值爲-1,後面的方法則相同

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章