Lyndon 串相关知识速记

Lyndon Words

一个串为 Lyndon 串当且仅当其为其所有后缀中字典序最小的.

Lyndon 分解:将一个串 \(w\) 分解为若干个字典序单调不增的 Lyndon 串 \(w_1, w_2, \cdots, w_k\) 的拼接,每个 \(w_i\)\(w\)Lyndon 因子.

可以证明一个串的 Lyndon 分解是存在且唯一的.

引理 1:若 \(u, v\) 均是 Lyndon 串且 \(u < v\),则 \(uv\) 也是 Lyndon 串.

分讨易证.


引理 2:Lyndon 分解的最后一个 Lyndon 串为原串的最小后缀.

由 Lyndon 分解的单调性及 Lyndon 串的性质易证.

考虑每个单个字符都是 Lyndon 串,由引理 1 不断合并,可以得到一组合法的 Lyndon 分解;由最小后缀的唯一性,利用引理 2 归纳,可以导出 Lyndon 分解的唯一性.

可以将相同的 Lyndon 串写成幂的形式,即 \(w= w_1^{p_1}w_2^{p_2}\cdots w_k^{p_k}\).


Duval 算法:称形如 \(u^ku'\) 的串为近似 Lyndon 串,其中 \(u\) 为 Lyndon 串,\(u'\)\(u\) 的一个前缀. 增量维护近似 Lyndon 串即可,也是 \(\mathcal{O}(|w|)\).


Significant Suffix

\(\operatorname{minsuf}(u)\)\(u\) 的最小后缀,记 \(\operatorname{minsuf}(u, v) = \min_{w\in \operatorname{suf}(u)}wv\).

对于字符串 \(w\) 的后缀 \(w'\),若存在字符串 \(v\) 使得 \(w'v\) 为字符串集合 \(\{w''v|w''\in \operatorname{suf}(w)\}\) 中字典序最小的元素,则称 \(w'\)\(w\) 的 Significant Suffix. 将字符串 \(w\) 的所有 Significant Suffix 组成的集合记做 \(\Lambda(w)\).


引理 3:

\[v < uv < u^2v < \cdots < u^\infty \]

\[v > uv > u^2v > \cdots > u^\infty \]

两条不等式链中一定恰有一条成立.

证明考虑 \(v < uv\)\(v > uv\) 中恰有一条成立,反复运用即可.


引理 4:\(\Lambda(w)\) 的元素形如 \(w_i^{p_i}\cdots w_k^{p_k}\),将这个串记做 \(s_i\).

首先由 Lyndon 串的性质,一定形如 \(w_i^tw_{i+1}^{p_{i+1}}\cdots w_{k}^{p_k}\),再由引理 3 可知当 \(t\in(0, k_i)\cap \mathbb N\) 时都无法取到最值.

(似乎?)可以证明这里的 \(s_i\) 的字典序是单减的,考虑反证

\(s_{i+1}> s_{i}\),则 \(s_{i+1}>w_i^{p_i}s_{i+1}\),由引理 3 知 \(s_{i+1}>w_{i}^\infty\),那么存在 \(j\in[i+1, k]\cap \mathbb N\)\(w_i\) 的某个后缀 \(w'_i\) 使得 \(w_j>w'_i>w_i\),与 Lyndon 分解的性质矛盾.


显然有 \(\forall s\in \Lambda(w), \nexists s', s'\vartriangleleft s\)

再由 \(s_i\) 的单调性,\(s_i\) 为 Significant Suffix 的一个必要条件是 \(s_i\sqsupset s_{i+1}\).

引理 5:\(s_i\sqsupset s_{i+1} \iff w_i\sqsupset s_{i+1} \iff i \ge \lambda\),其中 \(s_\lambda\) 为 Duval 算法中第一次比较完字符串末尾时的近似 Lyndon 串.

由 Duval 算法的过程易证.

实际上 \(i\ge \lambda\) 也是 \(s_i\in \Lambda(w)\) 的必要条件,于是可以 \(\mathcal{O}(|w|)\) 求出 \(\Lambda(w)\).


引理 6:对于 \(u, v\in\Lambda(w)\),若 \(|u|<|v|\),则 \(2|u|\le |v|\),于是 \(|\Lambda(w)| = \mathcal{O}(\log w)\).

由引理 4 和引理 5,可以简单推出 \(|s_i|\ge 2|s_{i+1}|\),而满足\(|s_i|\ge 2|s_{i+1}|\) 的串只有 \(\mathcal{O}(\log|w|)\) 个,于是显然.

实际运用中往往不需要求出每个后缀是否为 Significant Suffix,只需取 \(\{s_i\big| |s_i|\ge 2|s_{i+1}|\}\) 即可.

posted @ 2024-05-28 15:21  wiki0922  阅读(30)  评论(0编辑  收藏  举报