.. -*- coding: utf-8; -*- ========================================== シュー・モールス文字列 ========================================== | 初期文字 :math:`a` と :math:`b` による :math:`n` 番目のシュー・モールス文字列 .. raw:: html    
n =
a =
b =
・TM(n) = dummy
| **注** : :math:`n` に大きい値を入れすぎるとおかしくなります.(入力制限で :math:`n<16` としています) 定義 ========================================= 以下の漸化式によって定義される :math:`TM_n` を :math:`n` 番目の **シュー・モールス文字列** *(Thue-Morse string)* という. - :math:`TM_0 =` 0 - :math:`TM_{n} = TM_{n-1} + TM'_{n-1}` ただし、 :math:`TM'_{n}` は :math:`TM_{n}` をビット反転させたものである.(例: :math:`TM_{n}=10010` ならば :math:`TM'_{n}=01101` ) :math:`TM_{n}` は :math:`TM_{n-1}` に次の規則に従った変換を行うことにより生成することもできる.ただし、:math:`TM_0` = 0 とする. - 0 :math:`\to` 01 - 1 :math:`\to` 10 また,この手続きを無限に繰り返してできる無限文字列を *無限シュー・モールス文字列* という. - :math:`TM_{\infty} =` 01101001100101101001011001101001100101100110100101101... 例 ----------------------------------------- 例えば,最初の6個のシュー・モールス文字列は次の通り. - :math:`TM_0 =` 0 - :math:`TM_1 =` 01 - :math:`TM_2 =` 0110 - :math:`TM_3 =` 01101001 - :math:`TM_4 =` 0110100110010110 - :math:`TM_5 =` 01101001100101101001011001101001 その長さの系列は1,2,4,8,16,32,...であり, :math:`n` 番目のシュー・モールス文字列の長さは :math:`2^n` である. 性質 ======================== - :math:`n` 番目のシュー・モールス文字列に含まれる回文の最大数以下のようになる - :math:`n` が偶数ならば :math:`|TM(n)|` - :math:`n` が奇数ならば :math:`|TM(n-1)|` - 無限シュー・モールス文字列の長さ :math:`2^n` の接頭辞は :math:`TM_{n}` と一致する  - 無限シュー・モールス文字列の :math:`N` 番目の文字 :math:`TM_{\infty}[N]` に関して以下が成り立つ - :math:`TM_{\infty}[0] = 0`, - :math:`TM_{n}[2i] = TM_{n}[i]` :math:`(0 \leq i \leq 2^n)` - :math:`TM_{n}[2i+1] = 1 - TM_{n}[i]` :math:`(0 \leq i \leq 2^n)` .. .. todo:: 出典探し(あれば) アルゴリズム ========================================= :math:`n` 番目のシュー・モールス文字列を返す ----------------------------------------------- - 定義にしたがって作ったもの( :download:`/Scripts/Python/thue_morse1.py`) .. literalinclude:: /Scripts/Python/thue_morse1.py :pyobject: tm - 0 :math:`\to` 01,1 :math:`\to` 10の規則に従って生成するもの( :download:`/Scripts/Python/thue_morse2.py`) .. literalinclude:: /Scripts/Python/thue_morse2.py :pyobject: tm 無限シュー・モールス文字列の :math:`n` 番目の文字を返す ------------------------------------------------------------ - 愚直な,遅いバージョン - 何番目の文字列に出現するかを求めてから文字を返す :download:`/Scripts/Python/infthue_morse.py` .. literalinclude:: /Scripts/Python/infthue_morse.py :pyobject: inftm .. .. todo:: 他にも,効率のよいものが書けるのか?