后缀自动机(我太蒟了!)

一篇十分详尽的讲稿

一.概念:

  对于关于字符串S的SAM,它将包含且只包含S所有子串。

二.关键(endpos类):

  对于一个子串T,它在原串出现的位置的右端点组成的集合为它的endpos集合。

  对于一个子串有其唯一的endpos集合,对于一个endpos类包含了多个子串。

  关于一个字符串的任一endpos类,它所包含的子串互为后缀

  任两个不同的endpos集合存在且只存在两种集合关系:属于或无交 。(此性质为其能形成树形结构奠定了基础。)

三.性质:

  1.双面性:它存有两种边,分别与节点组成 DAG图 和 树形结构 ,且节点在两种结构中的意义大有区别

  2.关于 DAG图 ,一个节点表示的是一个字符,从超级点出发的任一条路径的字符顺次连接组成的字符串为原串的一个子串。

  3.关于 树形结构 ,一个节点表示的是一个 endpos类 。对于存在祖代关系的两个节点 ,满足祖辈节点表示的 endpos集合 包含后辈节点表示的endpos集合 。而且一个节点进而能表示一坨互为后缀且连续的字符串。一般我们会记录每个节点在此意义下表示的字符串中最长的字符串的长度。而且这个最长的字符串的所有后缀将被此节点到超级点的所有节点无重复的包含。

  4.对于每一个节点,在 DAG图 上从超级点跑到当前点的所有字符串能被一个集合表示,而考虑在 树形结构 中也存在一个集合。其实这两个集合等价。

原文地址:https://www.cnblogs.com/wyher/p/11027923.html