后缀自动机 部分理解与思考

快速手模后缀链接(Parent Tree)

本节的【后缀链接】均指代所有后缀链接构成的“Parent Tree”
一般情况下手模的时候,也是需要画出所有后缀链接。

自动机在构建的过程中会有clone操作,对连边进行修改。如果直接按照代码逻辑去模拟会有很多涂改,并不方便。

一般手模是从自动机状态的定义出发:(参考证明类教程)

  • 把原串的所有子串按照END_POS进行分组,每个组就是自动机里的一个状态,每个状态取最长的子串来辨识。
  • 后缀链接就是从一个状态连向它的最长后缀所在的状态。

还有一些小技巧:

  • 第一层的END_POS就是每种字母出现的位置分组。不过,注意他们的不一定就是1。比如下面这个例子中的{2,5},实际是用肉眼算出每个位置对应前缀的公共后缀。
  • 每个状态下面的分支都是对当前状态的子集进行划分,子状态的辨识字符串尽量长,并且保持同个状态里END_POS一致。
    后缀自动机 部分理解与思考后缀自动机 部分理解与思考

在比较短的串里,肉眼观察其实很快,多画几次就会熟悉了。我觉得手模样例也是解题找思路的重要一步。