后缀自动机(学习笔记)

要看懂本文可能至少需要知道什么是后缀(

还得知道一些自动机的概念(

 

和ac自动机有个很大的不同,sam它的字符是放在边上的(似乎放在点上也可以),因为大部分图都是这样的,(比如下图),把点看成了能接受从起点到该点的路径串的状态。

T状态能接受abc和bc字符串。  ( ps:图随手画的)

首先定义一些概念:

endpos(t):表示子串t的结束位置。比如aabaa,endpos(“aa”)={2,5}

在sam中,每个endpos(t)即为一个状态,也就是说几个endpos(t)相同的不同子串共用一个状态;显然abab中,ab和b是共用一个状态的。

先定义一个状态:x

string(x):表示x状态能接受的所有字符串。

可得性质1

在string(x)中,短串是长串的后缀。

再定义几个东西:

string(x)_max,string(x)_min:分别其中的最长串、最短串。

又得性质2:

string(x)=={string(x)_min,string(x)_min+1,string(x)_min+2,,,,,,string(x)_max},就是说最长串的后缀连续出现在string(x)中,直到string(x)_min。

 

那么又会有疑问了,那长度小于string(x)_min的后缀呢?由于那些后缀的endpos(t)多了几个元素,便不和它们共用一个状态了。但还是有个东西把那些后缀也表示了出来。

定义Suffix指针:指向属于它后缀的状态。如下图绿色的线:

至此,,,似乎已经明白后缀自动机的结构了。

再补充两个点:

所有的子串即为从S出发的所有路径,即为所有状态的string(x)之和。

能轻易地知道每个子串的所有后缀。

状态总数为O(n)。

 

如何O(n)构造呢?

考虑递推,已经建好了前n-1个字符,再加入一个字符c,无非又多了n个子串。

定义pre[n-1]为前面n-1个字符构成的字符串。

这个时候我们只需看当时的末状态,即能接受pre[n-1]的那个状态,因为pre[n-1]的所有后缀加一个字符c就是新增的n-1个子串。

前面说过string(x)_max,string(x)_min,就不多说了,用一条边为c的边连接末状态和新状态,就解决了max-min+1个子串,也解决了pre[n]。

剩下可以分3类情况:

这个时候就需要借用末状态的Suffix指针了。

定义Suffix指针指向了y状态,上面说的新增状态为z。

1,y状态+c,在原有sam上不能发生转移,y新增一条边c指向z。

2,y状态+c,算了,太tm难了。

转载于:https://www.cnblogs.com/lnu161403214/p/9801069.html

内容概要:该研究通过在黑龙江省某示范村进行24小时实地测试,比较了燃煤炉具与自动/手动进料生物质炉具的污染物排放特征。结果显示,生物质炉具相比燃煤炉具显著降低了PM2.5、CO和SO2的排放(自动进料分别降低41.2%、54.3%、40.0%;手动进料降低35.3%、22.1%、20.0%),但NOx排放未降低甚至有所增加。研究还发现,经济性和便利性是影响生物质炉具推广的重要因素。该研究不仅提供了实际排放数据支持,还通过Python代码详细复现了排放特征比较、减排效果计算和结果可视化,进一步探讨了燃料性质、动态排放特征、碳平衡计算以及政策建议。 适合人群:从事环境科学研究的学者、政府环保部门工作人员、能源政策制定者、关注农村能源转型的社会人士。 使用场景及目标:①评估生物质炉具在农村地区的推广潜力;②为政策制定者提供科学依据,优化补贴政策;③帮助研究人员深入了解生物质炉具的排放特征和技术改进方向;④为企业研发更高效的生物质炉具提供参考。 其他说明:该研究通过大量数据分析和模拟,揭示了生物质炉具在实际应用中的优点和挑战,特别是NOx排放增加的问题。研究还提出了多项具体的技术改进方向和政策建议,如优化进料方式、提高热效率、建设本地颗粒厂等,为生物质炉具的广泛推广提供了可行路径。此外,研究还开发了一个智能政策建议生成系统,可以根据不同地区的特征定制化生成政策建议,为农村能源转型提供了有力支持。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值