數據結構筆記--KMP算法簡單理解

KMP算法中的函數值只和模式串有關,而和相匹配的主串無關。

例 主串:a c a b a a b a a b c a c a a b c

模式串:a b a a b c a c

1.首先,我們給模式串標上序號

2.之後,我們把模式串的所有前綴依次列出來(雖然前綴不能爲串本身,但在這裏我麼也將其列在最後面)

3.接下來,我們要求得每一個子串中相等的前綴與後綴的最大長度

我們拿第五個子串作爲例子

可以看出,這條子串有相同的前綴後綴:ab 長度爲2

123步示意圖

4.這樣,我們就得到了一組序列,但是這並不是我們要的next數列,我們暫且把它叫做maxL數列

5.接下來我們將maxL數列複製一行,去掉最後一個值,在開頭加上一個-1,往右平移一格,每個值+1,這就是我們想要的next數列

6.接下來來看nextVal數列

  1. 首先,第一個值填爲0;
  2. 序號依次檢查maxL值和next值是否相等,若不相等,填入對應的next值;

  1. 若相等,填入對應序號爲next值得nextVal值

 

 

7.這樣,我們就得到了nextVal數列。

 

 

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