SAM学习笔记

后缀自动机(SAM)学习指南 *在学习后缀自动机之前需要熟练掌握WA自动机、RE自动机与TLE自动机* 什么是后缀自动机 后缀自动机 Suffix Automaton (SAM) 是一个用 O(n) 的复杂度构造,能够接受一个字符串所有后缀的自动机。 它最早在陈立杰的 2012 年 noi 冬令营讲稿中提到。 在2013年的一场多校联合训练中,陈立杰出的 hdu 4622 可以用 SAM 轻松水过,由此 S 阅读详情

主要参考的是这篇blog
以及这篇俄文翻译
upd:一些性质参考的是这篇blog,Menci超劲啊!
因为clj的论文太难懂了其他blog又是特别抽象的对我这种蒟蒻特别不友好
这篇blog是方便自己复习写的所以难免有引用其他blog的地方

一些定义

定义ch[p][s]表示在状态p上增加一个字母s后能转移到的状态,如果不能转移则为0
定义str(s)表示在原串中走到s这个位置所构成的字符串
定义right(i)表示str(i)在原串中出现过的右端点的集合
定义min(i)表示root->i能走出的最短子串长度 max(i)表示能走出的最长子串长度
定义parent(i)表示在SAM中,right(i)是right(parent(i))的真子集且right(parent(i))最小
可以发现所有的parent连起来可以构成一棵树,将这棵树称为parent树

parent树的一些性质

1:从叶子节点向上走就是right集合不断合并的过程
2:设一个状态最短串为mins,最长串为maxs=lens,那么mins-1=max_fa[s]
3:网上说的接受后缀,其实可以换一种好理解的说法,parent的树从下到上right集合不断变大其实就是不断寻找后缀的过程

构造方法

增量法
对于已经建立好SAM的串1~last,设插入后的状态为np,插入字母为c
那么max(p)=max(last)+1,将ch[last][c]=np
然后我们开始跳last,设这个跳动的节点为p
如果ch[p][c]=-1的情况时,由于p的right集合是包含了last的right集合的,那么可以直接将ch[p][c]指向p
当ch[p][c]!=-1的时候,可以发现当前已经有这个状态了,设ch[p][c]=q
分类讨论:
1:当max[p]+1=max[q]时,我们可以知道,q这个状态是从p直接转移过来的。由于p的right集合包含了last的right集合,q的right集合也可以包含了np的right集合,那么直接将np的parent指向q然后退出
2:当不等于时,我们就要新建立一个万能的节点nq,使max[nq]=max[p]+1,然后将q和np的parent指向nq。然后对于前面状态与q合并了的,将他的孩子指向nq
代码中dep代替了max的作用

void add(int k)
{
    int x=a[k];
    int p=last,np=++cnt;
    tr[np].dep=k;
    while(p && tr[p].son[x]==0)tr[p].son[x]=np,p=tr[p].parent;
    if(p==0)tr[np].parent=root;
    else
    {
         int q=tr[p].son[x];
         if(tr[q].dep==tr[p].dep+1)tr[np].parent=q;
         else
         {
            int nq=++cnt;
            tr[nq]=tr[q];tr[nq].dep=tr[p].dep+1;
            tr[q].parent=tr[np].parent=nq;
            while(p && tr[p].son[x]==q)tr[p].son[x]=nq,p=tr[p].parent;
         }
    }
    last=np;
}

证明

主要证明一下构造中max(q)!=max(p)+1的情况
可以发现这时候q不是从p这里拓展出来的了,但是对于某些q的后缀,他们也是可以接受np的
这些后缀的max长度为max(p)+1,那么从q中脱离出来一些状态,设这个状态为nq
将max(nq)设为max(p)+1,其余与q不变。由于nq是q中脱离出来的,他的right集合肯定包含了q的right集合,于是可以将q的parent指向nq。
这时候nq已经脱离完毕了,将np的parent也指向nq。对于之前一些与q合并了的状态,我们也要将他指向nq啦

应用

可以参考一下那篇俄文翻译上的内容
或者接下来的SAM题表

广义后缀自动机

其实就是对一个Tire建后缀自动机
Tire上的后缀的定义为:一个Tire节点走到根的路径构成的子串
那么这个后缀自动机的目标就是能识别这堆子串
于是你就BFS建图,搜到一个节点的时候把last设为这个节点的父亲,然后跟狭义后缀自动机一样讨论建就OK了

LIO-SAM学习笔记-整体框架 LIO-SAM学习笔记 阅读详情

相关推荐

【Segment Anything Model】十(1):利用SAM做分类任务,方法二,不放过SAM强大特征提取能力,将SAM提取到的ImageEmbedding插入到其他cnn网络中

直接黏贴复制就好'''该类定义了VGG-16的基本结构。features: 代表VGG网络的主体部分,即所有的卷积层和池化层。avgpool: 是自适应平均池化层,将特征图大小调整为7x7。classifier: 是VGG网络的分类部分,由全连接层组成。_initialize_weights(): 初始化权重的方法。

cvxiayixiao的博客 3563

后缀自动机SAM学习笔记

前言(2019.1.6) 已经是二周目了呢... 之前还是有一些东西没有理解到位 重新写一下吧 后缀自动机的一些基本概念 参考资料和例子 from hihocoder DZYO神仙翻译的神仙论文 简而言之,后缀自动机(SAM),是一个有限状态自动机(DFA) SAM分为两个部分,一部分是一个Dag,另一部分是Parent树。——laofu 搬一个图下来(这是字符串\(aabbabd\)的\(SAM...

weixin_30614109的博客 196

aws(学习笔记第二十四课) 使用sam开发step functions

sam。

sealaugh32的专栏 1277

MathWorks工程AI实践:从MATLAB到AI驱动的系统设计与部署

人工智能在工程领域的应用正从算法研究转向系统集成与可靠部署。工程AI的核心挑战在于解决模型的可解释性、可靠性与嵌入式系统集成的“最后一公里”问题。基于模型的设计方法论通过将AI模型作为可仿真、可验证的组件融入系统工程流程,实现了从虚拟仿真到硬件部署的无缝衔接。例如,在工业预测性维护中,结合信号处理与特征提取的预处理流程,能有效提升故障诊断的准确性与可解释性。通过集成深度学习、强化学习等工具箱,并支持ONNX等开放格式,工程软件平台能够将训练好的AI模型转化为可在嵌入式处理器或FPGA上高效运行的代码,从而在

weixin_34236869的博客 358

sam优化器学习笔记

参考: 为什么SAM可以实现更好的泛化?如何在Pytorch中实现SAM?-电子发烧友网 导读使用SAM(锐度感知最小化),优化到损失的最平坦的最小值的地方,增强泛化能力。 动机来自先前的工作,在此基础上,我们提出了一种新的、有效的方法来同时减小损失值和损失的锐度。具体来说,在我们的处理过程中,进行锐度感知最小化(SAM),在领域内寻找具有均匀的低损失值的参数。这个公式产生了一个最小-最大优化问题,在这个问题上梯度下降可以有效地执行。我们提出的实证结果表明,SAM在各种基准数据集上都改善了的模型泛化.

jacke121的专栏 7526

Python自动化神器:OP插件64位版从安装到实战(附雷电模拟器截图技巧)

本文详细介绍了Python自动化神器OP插件64位版的安装与实战应用,包括环境搭建、窗口控制、鼠标键盘模拟等核心功能。特别针对雷电模拟器提供了最小化截图技术和OCR识别优化方案,帮助开发者高效实现Windows自动化任务。

weixin_29094539的博客 333

bzoj3676:回文串(manacher+SAM的parent树上倍增)

模拟考是碰到的,以前听过但没有做过,当场推出来了。 题面 题意就是给你一个串,定义字串的得分为长度*出现次数,问所有回文串中的最大得分。 题目分析:回文串当然首推manacher算法,只有当右指针右移时才会出现本质不同的回文串,得到该串的l和r,然后就是统计该串出现次数,很水的的我只会SAM了。 SAM的每个状态的所有串互为后缀,还记下

KKiseki的博客 610

python中frida的安装+frida-server(雷电模拟器)保姆级安装教程

frida的安装,安卓逆向,adb

2301_80224944的博客 4582

LVI-SAM学习笔记

该框架由两个关键子系统组成:视觉-惯性系统(VIS)和激光雷达-惯性系统(LIS)。视觉惯性系统处理图像和 IMU 测量值,激光雷达测量值为可选项。视觉里程测量是通过最小化视觉和 IMU 测量的联合残差获得。LIS 可提取激光雷达特征,通过将提取的特征与特征图匹配来进行激光雷达测距。特征图以滑动窗口方式进行维护,以实现实时性能。最后,状态估计问题可表述为最大后验(MAP)问题,使用iSAM2通过在因子图中联合优化 IMU 预集成约束、视觉里程测量约束、激光雷达里程测量约束和闭环约束的贡献来解决。

yijaiwei的博客 3396

KEGG两类报错--①No gene can be mapped--②URL ‘https://rest.kegg.jp/link/hsa/pathway‘…

版本问题,重新安装一下clusterProfiler包。网络问题,可以等待之后再试一下(试过不是)(以上可以排除基因不存在的错误因素)

weixin_57699783的博客 2万+

MST-GAT: Enhancing Anomaly Detection in Multimodal Time Series with Intra- and Inter-Modal Attention

本文深入解析了MST-GAT模型,这是一种通过模态内与模态间注意力机制增强多模态时间序列异常检测的新方法。它通过构建图结构显式建模传感器间的复杂时空依赖,并结合时间卷积网络与联合优化策略,有效降低了传统方法中常见的误报与漏报问题,在工业监控等场景中展现出卓越性能。

weixin_29079671的博客 150

从零开始的SAM(Segment Anything Model)学习笔记(1)

本文介绍了在Anaconda环境中安装和运行SAM(Segment Anything Model)图像分割模型的完整流程。首先需要从GitHub下载源码,配置Python≥3.8、PyTorch≥1.7和torchvision≥0.8等依赖环境,并确保CUDA版本与显卡兼容。文中提供了详细的PyTorch版本选择和安装指南。核心代码实现了批量处理图像的全自动分割功能,支持多种格式的输入/输出,通过SAM模型生成分割掩膜并可视化保存结果。该脚本包含环境检测、模型加载、图像处理、结果保存等完整功能,适用于需要批

leslie0716的博客 1064

AI Pika 生成进击的巨人动漫分镜案例

AI Pika 生成进击的巨人动漫分镜案例 Pika 是一个使用AI生成和编辑视频的平台。

独立开发,substack顶级编辑 2574

SAM2学习笔记

使用更严格的阈值以减少噪声sam2,points_per_side=32, # 点网格密度(默认 32)pred_iou_thresh=0.88, # 提高 IoU 阈值(默认 0.8)stability_score_thresh=0.95, # 提高稳定性阈值(默认 0.95)crop_n_layers=1, # 使用多尺度裁剪(默认 0)min_mask_region_area=100, # 过滤小于 100 像素的区域。

墨门 1347

【unity小技巧】实现FPS射击游戏枪武器随镜头手臂摇摆效果(2025/12/11补充)

如果我们视角移动转向,武器如果不跟着进行摇摆,会感觉我们的动作很生硬,特别是射击类游戏,如下实现武器摇摆这里主要分享两种实现方法,一种是改变武器位置,一种是修改武器旋转想要使用哪种方法都可以,看你自己喜欢,如果是我,我会选择第二种,比较简单,参数也少,而且个人感觉效果也更好,已枪中心做旋转更符合现实。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1470

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

SAM 学习笔记

SAM 后缀自动机,类似 SA 的字符串处理工具。 SAM 是一个有向无环图,图上从 Root 出发的每一条路径表示字符串s的一个后缀,每一条路径表示一个字串。 定义对于每一个节点: len: 表示该 Root 到该节点的最长路径长度(该状态所能接受的最长字串) min = p->pre->len+1:该状态所能接受的最短字串 nxt[alpha]:该节点的有向...

hz 的博客 960

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

【学习笔记】SAM的结构和应用

不得不感叹,$SAM$真是字符串工具的集大成者。之前没认真学真是太可惜了。

cqbzlydd的博客 1797

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

后缀数组(SAM)学习笔记

SAM学习笔记定义状态集一些性质后缀链接转移函数性质算法实现核心应用 这篇博客是最近在 SAMSAMSAM 的学习过程中记录下的笔记,很多内容都来自 zjp 以及 hihocoder 因为两篇博客写的都已经很好了,记下的目的也算是展示我的理解。 定义 我们依然引入以上博客的概念。 对于字符串 S="aabbabd"S="aabbabd"S="aabbabd" ,它的后缀自动机是: 对于 SSS ...

weixin_43941332的博客 609
上一篇: [bzoj5192][Usaco2018 Feb][LCT]New Barns
下一篇: [bzoj3715][乱搞]Lustra
Rose_max
博客等级 码龄10年 97粉丝 610原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值