語のLyndon判定アルゴリズム

Created with Raphaël 2.2.0語がLyndonか判定するinput: 語2つの語に分けるYes or No?手前の語が後の語より大きい非Lyndonフラグと2つの語inputの語はLyndonではないoutput: 非Lyndonフラグと2つの分けられた語Yes or No?他に試していない2つの語に分ける場所があるLyndon語フラグindputの語はLyndonoutput: Lyndonフラグyesnoyesno

語のDuval分解アルゴリズム

Created with Raphaël 2.2.0語をDuval分解した二分木を作成するinput: 語語を二分木の葉の子に置く親がなければ親になる葉のうちLyndonでない語を選ぶLyndon判定葉をLyndonとする葉はすべてLyndonかDuval分解二分木Duval分解完了output: Duval分解済みの二分木葉の子に、分けた順に2つの語をつけるyesnoyesno
  1. 語を用意する
  2. 語について非Lyndonと仮定しておく
  3. 語をどこかで二つに分ける
  4. 手前と後の語を辞書式に比較する
  5. 手前の方が小さいなら、2.から順に繰り返す(別の場所で区切る)
  6. 手前の方が大きいなら、分けた二つの語について、1.から順に繰り返す
  7. ある語について4.をすべての区切りで試して必ず手前の方が小さいなら、分けられた残りの語について2.から順に繰り返す(この語がLyndon)
  8. 5.で分けたすべての語(*葉ノード)について6.でLyndonと判定されたとき、アルゴリズムを終了する(葉ノード以外の語はすべて非Lyndon)
    分けられない語はLyndon