KMP算法

1、next[ ] 数组

  next [ j ]=s 的最长相等前后缀长度加 1 

  next[1]=0 (规定)  next[2]=1

  KMP平均时间复杂度为O(n+m)

2、nextval[ ] 数组

  nextval数组就是在next数组的基础上,把回溯的一步一步的中间步骤省略,直接写出最终要移动的位置。(因为根据next数组值找到上一个跳转位置的时候,这个位置也有一个对应的next数组值,因此有可能不是最终位置,还要根据这个位置的next数组往回找)。

  具体的方法:用 i 所对应的next [ i ] 所指的关键字与 i 所指的关键字进行比较。

        如果不同,则nextval [ i ] = next [ i ]

        如果相同,则nextval [ i ]用next [ i ] 所指的上一个位置所对应的nextval [ next [ i ] ] 来代替,从而达到优化的目的。

3、例题:

  已知模式串T=‘abababcabc’ ,则next函数值及nextval函数值为?

  

    

posted @ 2020-11-15 10:53  喵喵队立大功  阅读(87)  评论(0编辑  收藏  举报