首页 > 其他分享 >Lyndon 小记

Lyndon 小记

时间:2023-04-25 21:13:43浏览次数:46  
标签:加一 Lyndon 算法 分解 拆分 某个 小记

神秘科技。

定义一个串为 Lyndon 串,当且仅当这个串的最小表示法是它本身。

定义一个串的拆分为 Lyndon 分解,当且仅当每个拆分都是 Lyndon 串,且 \(s_i\geq s_{i+1}\)。

求出某个串的 Lyndon 分解可以用 Duval 算法,该算法可以 \(O(n)\) 求出这个串的 Lyndon 分解。

这个算法的流程如下:我们维护原串的某个拆分 \(s_1,s_2,s_3\),其中 \(s_1\) 表示已经拆分好了的 Lyndon 分解,\(s_2\) 表示某个 Lyndon 串的若干循环。具体的,设 \(w\) 为某个长度为 \(l\) 的 Lyndon 串,则 \(s_2\) 可以表示为 \(ww\dots ww[1,i]\),其中 \(1\leq i\leq l\)。\(s_3\) 表示尚未处理的串。

假设 \(s_2\) 的开始位置为 \(i\),\(s_3\) 的开始位置为 \(j\),\(j\) 减去 \(s_2\) 那个循环的 Lyndon 串长的位置为 \(k\)。 则我们分类讨论 \(c_j\) 与 \(c_k\) 的大小关系:

  • 如果 \(c_j=c_k\),那么循环可以扩展一位,则 \(j,k\) 同时加一。
  • 如果 \(c_j>c_k\),则 \(c[i,j]\) 可以视作一个新的 Lyndon 串,那么令 \(k\) 回到初始位置,然后 \(j\) 加一。
  • 如果 \(c_j<c_k\),则 \(c[i,j]\) 不是某个 Lyndon 串的循环了,那么我们将已经有的 Lyndon 串的循环节依次截取出来加入 \(s_1\),最后剩下循环了一半的位置,更新 \(i\) 之后让 \(j\) 从 \(i+1\) 重新开始即可。

不难证明过程中满足 Lyndon 分解的性质。

那么复杂度呢?可以对几个指针分别讨论,\(i\) 显然是 \(O(n)\) 的,\(j,k\) 每次只会至多加一因此也是 \(O(n)\) 的。那么总的复杂度就是 \(O(n)\) 的。

模板题提交记录

标签:加一,Lyndon,算法,分解,拆分,某个,小记
From: https://www.cnblogs.com/275307894a/p/17353875.html

相关文章

  • 20230424小记
    闲话今天还是体育的一天明天就要送别可爱同桌了呜呜呜呜呜呜呜呜呜呜呜呜她去济南了呜呜呜呜呜呜呜呜呜呜呜呜冰糖老婆的精神状态好像不太正常哭唧唧调代码需要的信息提取能力也太高了()听中V调代码效率↓/cf题调了昨天的题,复习了平衡树,然后调了一年。第二天的升旗仪式......
  • 20230423小记
    没有耳机我要死了耳机没电了回家充电忘带回来了哼哼啊啊啊啊啊闲话虽然中午的活动很有趣,但是八卦很无聊,尤其是我不感兴趣的八卦。打球很开心,但是不会温柔的打球。和lzy贴贴很开心。每日一问,同桌和她的学长什么时候。晚上还要上课麻。太他妈累了,可能需要睡一会。想睡觉是......
  • 最小割树小记
    最小割树是一种支持动态查询两点间最小割的结构。构造任意选两个点\(s,t\),在全图上跑出\(s\tot\)的最小割\(w\),建立边\((s,t,w)\)。设残量网络上与\(s\)连通的部分为\(S\),与\(t\)连通的部分为\(T\),则将图分成\(S,T\)两个点集,并在两个点集上做类似的事情,直到点集......
  • kafka业务数据到ODS层处理小记
    kafka业务数据到ODS层处理小记1:kafka消息partition分区,应以表主键为key2:kafka消息落地后,同一批次数据中取主键+offset最大的一条,再删除基础数据中此批次数据,最后将此批次数据按数据处理类型(delete、insert、update),先insert、update,再delete。......
  • 20230417小记
    感觉每天开一个还是太麻烦了()应该会合并一下。20230417闲话感觉有点找到状态了,虽然在某些时候会被打回原形。早上同桌换衣服了在操场上走了半圈没认出来。明天争取跑两圈()。什么时候能跑三圈啊(思索)想和同学打球了。感觉羽毛球太有意思了。就是说很喜欢一起的友好的感觉。菜也......
  • 群论小记
    定义群:一个集合\(G\),和一个定义在其元素上的二元运算,这里记为\(*\)。群需要满足的性质:封闭性:\(\foralla,b\inG,a*b\inG\)单位元:\(\existe\inG,\foralla\inG,a*e=a\)逆元:\(\foralla\inG,\existb\inG,a*b=e\),将这里的\(b\)记作\(a^{-1}......
  • 20230414小记
    所以我选择被人讨厌————纯白↑快来一起听感受相仿的情绪。如果你可以共情。现在发现自己的精神状态真的堪忧。感觉被拉扯着还前进不了。看看成绩就突然不想活了。没意思。何必被牵扯着前进呢。在想学文化课的时候被竞赛打乱,在学竞赛的时候天天被磨叨文化课。被别人的......
  • 数学小记
    发现自己数学好菜好菜=_=反演莫比乌斯反演莫比乌斯函数\[\mu(n)=\begin{cases}1,&n=1\\(-1)^r,&n=p_1p_2…p_r\\0,&else\end{cases}\]莫比乌斯反演的一般形式\[f(n)=\sum_{d|n}g(d)\Leftrightarrowg(n)=\sum_{d|n}\mu(d)f({n\overd})\]\[f(n)=\sum......
  • 2023-4-13 某SAP项目面试小记
    2023-4-13某SAP项目面试小记   按照某个SAP猎头的安排,笔者今天应约参加一个基于TEAMS工具的电话面试。整个面试全程英语面试,共计52分钟。面试结束后,笔者凭借记忆,记录了面试官问过的那些问题,算是做一个回顾。 自我介绍一下过去的SAP项目经验。有无做过SAPS4HANA项目?......
  • 多线程_小记
    程序进入内存中运行就变成一个进程,进程具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位。进程:每个进程都有独立的代码和数据空间(进程上下文),进程间的切换会有较大的开销,一个进程包含1–n个线程。(进程是资源分配的最小单位)线程:同一类线程共享代码和数据空间,每个......