================================================== Burrows Wheeler Transform (BWT) ================================================== Michael Burrows と David J. Wheeler によって考えられた可逆変換の一種. 素朴な方法 ~~~~~~~~~~~~~~~~~~~~~~~~~ 入力文字列を循環させた文字列から成る表を考える. 例): :math:`S=banana` ======= == == == == == == i 0 1 2 3 4 5 ======= == == == == == == 0 b a n a n a ------- -- -- -- -- -- -- 1 a n a n a b ------- -- -- -- -- -- -- 2 n a n a b a ------- -- -- -- -- -- -- 3 a n a b a n ------- -- -- -- -- -- -- 4 n a b a n a ------- -- -- -- -- -- -- 5 a b a n a n ======= == == == == == == :math:`S` を巡回させた文字列から成る表を辞書順にソート ======= == == == == == == i 0 1 2 3 4 5 ======= == == == == == == 0 a b a n a n ------- -- -- -- -- -- -- 1 a n a b a n ------- -- -- -- -- -- -- 2 a n a n a b ------- -- -- -- -- -- -- 3 b a n a n a ------- -- -- -- -- -- -- 4 n a b a n a ------- -- -- -- -- -- -- 5 n a n a b a ======= == == == == == == この表の :math:`i=n` 番目( :math:`n=|S|` )の文字をつなげたものが BWTを行った文字列":math:`nnbaaa`"となる. 接尾辞配列を用いる方法 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .. literalinclude:: /Scripts/Python/BWT.py :pyobject: BWT 入力を変換 --------------------------------------- 元のテキストとBWTを行ったテキストの圧縮率の違いを比較 .. raw:: html