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\)大子串:求出路径数(子串数)后贪心即可
3.出现
? 出现次数在每个前缀位置标记,对树上子树中的标记求和
? 是否出现:直接放进去遍历转移即可
? 第一次出现:树上子树中的最小终点
? 所有出现位置:树上子树中的所有终点
4.广义\(SAM\)
? 建\(Trie\),\(bfs\),每次在其祖先的终点进行\(extend\)操作