SAM似神仙,入门到入土。。。(y总的笔记)

在这里插入图片描述

一、 S A M SAM SAM的性质:

  • S A M SAM SAM是一个状态机。一个起点,若干终点。原串的所有子串和从 S A M SAM SAM起点开始的所有路径一一对应,不重不漏。所以终点就是包含后缀的点。

  • 每个点包含若干子串,每个子串都一一对应一条从起点到该点的路径。且这些子串一定是里面最长子串的连续后缀

  • S A M SAM SAM问题中经常考虑两种边(绿边蓝边

    • 普通边:类似于 T r i e Trie Trie。表示在某个状态所表示的所有子串的后面添加一个字符。(蓝边
    • L i n k , F a t h e r Link, Father Link,Father. 表示某个状态所表示的最短子串的首字母删除。这类边构成一颗树(绿边)(由于绿边的特殊性,每次动态插入时,都可能会改变 绿边的连向

二、 S A M SAM SAM的构造思路

  • e n d p o s ( s ) endpos(s) endpos(s): 子串s所有出现的位置(尾字母下标)集合。 S A M SAM SAM中的每个状态都一一对应一个 e n d p o s ( s ) endpos(s) endpos(s)的等价类
  • e n d p o s endpos endpos 的性质
    • s 1 , s 2 s1,s2 s1,s2 s s s的两个子串, 不妨设 ∣ s 1 ∣ ≤ ∣ s 2 ∣ |s1| \leq |s2| s1s2。则 s 1 s1 s1 s 2 s2 s2的后缀当且仅当 e n d p o s ( s 2 ) ⊆ e n d p o s ( s 1 ) endpos(s2) \subseteq endpos(s1) endpos(s2)endpos(s1), s 1 s1 s1 不是 s 2 s2 s2的后缀当且仅当 e n d p o s ( s 1 ) ∩ e n d p o s ( s 2 ) = ∅ endpos(s1) \cap endpos(s2) = \emptyset endpos(s1)endpos(s2)=
    • 两个不同子串的 e n d p o s endpos endpos,要么有包含关系,要么没有交集。
    • 两个子串的 e n d p o s endpos endpos相同,那么短串为长串的后缀。
    • 对于一个状态st,以及任意的 l o n g e s t ( s t ) longest(st) longest(st)的后缀 s s s,如果 s s s的长度满足: s h o r e s t ( s t ) ≤ ∣ s ∣ ≤ l o n g e s t ( s t ) shorest(st) \leq |s| \leq longest(st) shorest(st)slongest(st), 那么 s ∈ s u b s t r i n g ( s t ) s \in substring(st) ssubstring(st).

三、 S A M SAM SAM的构造过程

  • 分类讨论。。。。
  • 证明略。。

四、 S A M SAM SAM时间复杂度

  • 线性 o ( n ) o(n) o(n),记得开两倍内存
  • 证明复杂,略。。。。

五、 S A M SAM SAM常见问题分析

六、 more,挖一个坑(等cf分数上去再补吧,现在这个超出我的水准)

菜鸡只配切模板题,下面的是bt难度题目。
cf2500+以上。。。。。。。。。。。。。。。。。。。

七、一些大佬的学习博客

第一篇
mie哥的一个题单

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值