SAM整理

SAM整理

by AmanoKumiko

1.基本概念

​ 表示后缀的位置(终止状态):从整个\(SAM\)的状态开始一直跳\(link\)

​ 表示前缀的位置(终点):插入一个点后的状态

​ 表示\(endpos\)相同的串:一个状态

​ 表示子串:路径

2.子串

​ 一个状态\(x\)的子串个数:\(len(x)-len(link_x)\)

​ 一个状态\(x\)的子串总长度:\(\frac{(len(x)+1)len(x)-(len(link_x)+1)len(link_x)}{2}\)

\(LCS\):不断通过转移和\(link\)找出\(A\)串的每个前缀和\(B\)串的最长公共后缀

​ 第\(k\)大子串:求出路径数(子串数)后贪心即可

​ 最长公共后缀:树上\(LCA\)\(len\)

​ 某个位置往前的所有不同字串:\(len\)的和减去任意相邻\(LCA\)\(len\)

3.出现

​ 出现次数在每个前缀位置标记,对树上子树中的标记求和

​ 是否出现:直接放进去遍历转移即可

​ 第一次出现:树上子树中的最小终点

​ 所有出现位置:树上子树中的所有终点

4.广义\(SAM\)

​ 建\(Trie\)\(bfs\),每次在其祖先的终点进行\(extend\)操作

posted @ 2022-01-25 15:15  冰雾  阅读(41)  评论(0编辑  收藏  举报