【学习笔记】后缀自动机

这玩意是个科技。那么我们首先需要直观的了解它的结构。

通俗的讲,后缀自动机是将后缀字典树进行压缩后的结果。可以发现,后缀自动机能够不重不漏地接受 S S S的所有子串。(结合 D F A DFA DFA的知识不难理解)

1.1 1.1 1.1 将后缀字典树上 Right \text{Right} Right集合相同的节点合并,称得到的 D F A DFA DFA为后缀自动机。

1.2 1.2 1.2 对于 S S S的任意两个子串 x , y x,y x,y,以下两者至少有一者成立:

Right ( x ) ∩ Right ( y ) = ∅ \text{Right}(x)\cap \text{Right}(y)=\empty Right(x)Right(y)=

Right(x) ⊆ Right(y) \text{Right(x)}\subseteq \text{Right(y)} Right(x)Right(y) Right(y) ⊆ Right(x) \text{Right(y)}\subseteq \text{Right(x)} Right(y)Right(x)

这个限制看着非常亲切啊,这意味着我们可以把 Right ( x ) \text{Right}(x) Right(x)划分成树的结构,因此后缀自动机的节点个数在 O ( ∣ S ∣ ) O(|S|) O(S)级别。

1.3 1.3 1.3 后缀自动机的构造(结合上述观察,不难理解其流程,这里略去)

最后,这玩意有一些高妙的应用,可能还会套上一些比较复杂的数据结构,因此先咕了

举个例子,我们要求状态 i i i对应的集合 S i S_i Si(右端点集合),那么我们应该把树结构提取出来,数子树内终止节点的数目即可。

这样说可能非常抽象,不过事实上通过 S i S_i Si的包含关系在树结构上的体现还是不难理解的

posted @ 2023-03-11 10:28  仰望星空的蚂蚁  阅读(14)  评论(0)    收藏  举报  来源