后缀自动机

right集:SAM读入字符串 a 后能识别的后缀的集合, 这些后缀分别从{r1 , r2 , r3, ... rx}开始。

后缀自动机的每个节点都是一个right集, 因为每个非叶子节点至少有两个儿子,所以我们可以知道parent树的总结点个数是O(n)的(大概为2倍)。

parent树中的叶子节点的right集大小为 1,因为任何两个节点的right集要么是真包含,要么是相离,所以所有叶子节点都是相离的,

那么我们可以通过统计parent树某个节点的子树中叶子个数来确定其Right集的大小

 

统计字符串 a 在 s 中的出现次数:

我们知道sam读入一个字符串 a, 会到达一个节点 stateA, 那么显然 stateA 的right集的大小即为答案。

 

不同子串个数:

即所有节点的 val(i) - val(fa(i)) 即可。因为对于一个节点映射出的子串,它们的长度是连续的,并且每个长度都唯一对应了一个子串。

posted @ 2017-05-01 22:05  92度的苍蓝  阅读(301)  评论(0编辑  收藏  举报
http://images.cnblogs.com/cnblogs_com/Running-Time/724426/o_b74124f376fc157f352acc88.jpg