KMP總結

KMP算法理解

兩個月之前徹底理解的KMP算法,爲了準備九推機試,再複習一下
KMP的理解花了我很久的時間,這次重新複習,感覺又忘了很多內容,記錄一下

進入正題

KMP算法的寫法有很多,主要應當注意以下幾點

  1. next[]的定義
  2. 字符數組的標號從0還是1開始

我的理解

按最普通的想法,匹配就不用說了,直接輸出相應的匹配串的開始位置即可,失配的情況是i退到應當比較的下一個位置,j退回到最初位置
複雜度最壞情況是最後才匹配到i走一遍,j每一個i全走一遍,所以爲O(n*m)

KMP算法的思想,也就是優化的地方就是:
失配了i也不動,j退回到自己應該的地方,j退回到正確的位置可以保證不漏解

應用

1.求循環節: 循環節長 = len - Next[len],一定要注意,必須是len - Next[len]
  例:沒有循環的時候必錯,因爲比 len 還小的數-Next[len]<len,而結果是 len
所以要注意,在求Next[]的時候,循環要(;i<len;)這樣才能把Next[len]求到

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