快速构造后缀自动机

参考资料

SUFFIX AUTOMATON by saisumit(可能要科学上网一下):
https://saisumit.wordpress.com/2016/01/26/suffix-automaton/

一点补充

我觉得原文中对于为什么要新开一个节点讲得还不是很透彻.
考虑新建一个节点u时, 我们一直往上跳suffix link, 到了(lst)节点. 我们发现(lst)已经有一个出边(c), 因此要进行特殊处理:

  • 假如可以直接将(u)的suffix link设为(p), 则根据suffix link的定义, 有(minlen(u) = len(p) + 1). 又因为(minlen(u) = minlen(x) + 1 = len(lst) + 2)((x)(u)有连边, 因而(minlen(u) = minlen(x) +1); 又因为(lst)(x)的suffix link, 因此(minlen(x) = minlen(lst) + 1)), 所以有(len(lst) + 2 = len(p) + 1), 所以有(len(lst) + 1 = len(p))
  • 反之, 假如(len(lst) + 1 < len(p)), 则有(u)的suffix link不为(p), 需要新建一个(len(q) = len(lst) + 1)的节点.
原文地址:https://www.cnblogs.com/ZeonfaiHo/p/7123091.html