zoukankan      html  css  js  c++  java
  • Lyndon分解 从 Lyndon 到 Runs

    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),满足:

    1. (w_1w_2cdots w_k=s)
    2. (forall i,w_i) 是 Lyndon Word;
    3. (w_1ge w_2ge w_3cdots w_k)

    则称 ({w_i|1le ile k})(s)Lyndon 分解,并记 ( ext{CFL}(s)={w_i|1le ile k})

    2.一些性质

    1. (a,bin mathbb L) ,且 (a<b) ,则 (abin 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) 次的结果,例如 (( 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)

    下分三种情况讨论:

    1. (s[k+1]=s[j+1]),则令 (kgets k+1)(jgets j+1),周期 (h) 保持不变。
    2. (s[k+1]>s[j+1]),则根据性质五可得 (vs[k+1]) 是 Lyndon Word,
  • 相关阅读:
    7.1 深搜子集和问题 (枚举子集+剪枝)
    javascript的运算符
    javascript中的数据类型Null
    其他进制数字转换
    javascript数据类型转换number
    javascript强制数据类型转换String
    自增自减
    一元运算符
    javascript中的数据类型boolean
    自增自减的练习
  • 原文地址:https://www.cnblogs.com/happydef/p/13485479.html
Copyright © 2011-2022 走看看