Lyndon 相关知识是大毒瘤。
——zght
1.一些定义
Lyndon Word:对于任意字符串 (s) 如果对任意后缀 (S),有$ S>s$,那么称 (s) 为Lyndon Word。
举个例子:( exttt{abcdefg}) 是 Lyndon Word,而 ( exttt{gfedcba}) 不是。
定义 (mathbb L) 表示 Lyndon Word 构成的集合。
定义 (Sigma) 表示字符集,组成的字符串为 (Sigma^*),组成的非空字符串为 (Sigma^+)
Lyndon 分解:对于任意字符串 (s),如果存在一组字符串 (w_1,w_2,cdots,w_k),满足:
- (w_1w_2cdots w_k=s);
- (forall i,w_i) 是 Lyndon Word;
- (w_1ge w_2ge w_3cdots w_k);
则称 ({w_i|1le ile k}) 为 (s) 的 Lyndon 分解,并记 ( ext{CFL}(s)={w_i|1le ile k}) 。
2.一些性质
- 若 (a,bin mathbb L) ,且 (a<b) ,则 (abin mathbb L)。
- Lyndon 分解存在且唯一。
- (w_1) 是最长的 Lyndon 前缀, (w_k) 是最长的 Lyndon 后缀。
- (s) 的最小后缀是 (w_k)。
- 如果 (sc) 是某个 Lyndon Word 的前缀,(c) 是单个字符,则对任意字符 (d>c),有 (sd) 是 Lyndon Word。
3. Duval's Algorithm
下记 ((s)^k) 表示 (s) 重复 (k) 次的结果,例如 (( exttt{ab})^5= exttt{ababababab}) 。
维护三个变量 (i,j,k),使得 (s[1dots i]=s_1s_2dots s_g) 是已经求得的 Lyndon 分解,且 (s[i+1dots k]=t^hv),其中 (h>1) 是尚未求出的 Lyndon 分解,使得 (v) 是 (t) 的真前缀,且 (s_g>s[i+1dots k])。令 (j=k-h)。
下分三种情况讨论:
- 若 (s[k+1]=s[j+1]),则令 (kgets k+1),(jgets j+1),周期 (h) 保持不变。
- 若 (s[k+1]>s[j+1]),则根据性质五可得 (vs[k+1]) 是 Lyndon Word,