Lyndon分解 從 Lyndon 到 Runs


Lyndon 相關知識是大毒瘤。

——zght

1.一些定義

Lyndon Word:對於任意字符串 \(s\) 如果對任意后綴 \(S\),有$ S>s$,那么稱 \(s\)Lyndon Word

舉個例子:\(\texttt{abcdefg}\) 是 Lyndon Word,而 \(\texttt{gfedcba}\) 不是。

定義 \(\mathbb L\) 表示 Lyndon Word 構成的集合。

定義 \(\Sigma\) 表示字符集,組成的字符串為 \(\Sigma^*\),組成的非空字符串為 \(\Sigma^+\)

Lyndon 分解:對於任意字符串 \(s\),如果存在一組字符串 \(w_1,w_2,\cdots,w_k\),滿足:

  1. \(w_1w_2\cdots w_k=s\)
  2. \(\forall i,w_i\) 是 Lyndon Word;
  3. \(w_1\ge w_2\ge w_3\cdots w_k\)

則稱 \(\{w_i|1\le i\le k\}\)\(s\)Lyndon 分解,並記 \(\text{CFL}(s)=\{w_i|1\le i\le k\}\)

2.一些性質

  1. \(a,b\in \mathbb L\) ,且 \(a<b\) ,則 \(ab\in \mathbb L\)
  2. Lyndon 分解存在且唯一。
  3. \(w_1\) 是最長的 Lyndon 前綴, \(w_k\) 是最長的 Lyndon 后綴。
  4. \(s\) 的最小后綴是 \(w_k\)
  5. 如果 \(sc\) 是某個 Lyndon Word 的前綴,\(c\) 是單個字符,則對任意字符 \(d>c\),有 \(sd\) 是 Lyndon Word。

3. Duval's Algorithm

下記 \((s)^k\) 表示 \(s\) 重復 \(k\) 次的結果,例如 \((\texttt{ab})^5=\texttt{ababababab}\)

維護三個變量 \(i,j,k\),使得 \(s[1\dots i]=s_1s_2\dots s_g\) 是已經求得的 Lyndon 分解,且 \(s[i+1\dots k]=t^hv\),其中 \(h>1\) 是尚未求出的 Lyndon 分解,使得 \(v\)\(t\) 的真前綴,且 \(s_g>s[i+1\dots k]\)。令 \(j=k-h\)

下分三種情況討論:

  1. \(s[k+1]=s[j+1]\),則令 \(k\gets k+1\)\(j\gets j+1\),周期 \(h\) 保持不變。
  2. \(s[k+1]>s[j+1]\),則根據性質五可得 \(vs[k+1]\) 是 Lyndon Word,


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM