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]求到

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