【KMP算法简单易懂解释?或用一个简单例子逐步说明一下.谢!-查字典问答网
分类选择

来自董炀斌的问题

  【KMP算法简单易懂解释?或用一个简单例子逐步说明一下.谢!】

  KMP算法简单易懂解释?或用一个简单例子逐步说明一下.谢!

3回答
2020-05-10 19:58
我要回答
请先登录
来国明

  好吧~KMP当初我也想了挺久的~很巧妙的算法啊!相必复制百科什么的你也不会看的了所以我手打吧…下面是我的理解~

  为了解说方便我把长的称为文本串,短的称为目标串~

  常规的匹配算法是把目标串一位一位地右移,跟文本串比较,而KMP则是跳着右移~

  举几个例子相信你就懂了

  ————————————————————————————————————————

  比如有一目标串为ababaca,当前位置匹配了前5个,也就是匹配了ababa,后面两个不匹配

  这说明了文本串当前位置也是ababa

  显然右移一位是不行的,因为从目标串可以看出(abab)a与a(baba)括号里的内容不相等

  而右移两位是可能可行的~因为可以看出(aba)ba与ab(aba)括号里的内容是相等的,这意味着移动两位后,目标串前三位aba是肯定匹配的~因为移动前也匹配~

  ————————————————————————————————————————

  再举一个例子~比如有目标串abcab,当前位置匹配了前两个ab

  那么就需要右移3个位置,因为(ab)cab与abc(ab)括号里内容相同,移动后有可能会匹配~

  ————————————————————————————————————————

  懂了么?表达能力有限…我也不能讲得更好了…具体代码网上一大堆,《算法导论》里面也有~我当初就是在算导里学会的!

  如果懂了,希望有追加分啊,手打累死!

  不懂的话,追问吧……

2020-05-10 20:03:02
董炀斌

  因为右移几位是通过观察,计算机实现的话是不是还要比较目标串自身?

2020-05-10 20:05:06
来国明

  我说的观察其实就是对目标串自身的初始化比较,通过对目标串的自身匹配可以计算出一个数组,这个数组里a[k]储存的是,当前匹配k个字母,需要右移多少个位置~

2020-05-10 20:06:22

最新问答

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读

  • 大家都在看
  • 小编推荐
  • 猜你喜欢
  •