Burrows–Wheeler Transform(BWT)とは
ロウズ=ウィーラー変換(正しくは Burrows–Wheeler Transform:BWT)は、 データ圧縮の前処理として使われる“可逆変換” です。 検索結果にもある通り、1994年に Michael Burrows と David Wheeler によって考案されました。
以下に、わかりやすく整理します。
Burrows–Wheeler Transform(BWT)とは
BWTは、元のデータを「圧縮しやすい形」に並べ替える変換です。 ポイントは:
情報は一切失われない(可逆)
同じ文字が連続しやすい形に変換される
その後に
Move-To-Front(MTF)
Run-Length Encoding(RLE)
エントロピー符号(Huffmanなど) を組み合わせると高圧縮になる。
bzip2 などの圧縮形式で使われています。
どうやって変換するのか(直感的な説明)
検索結果の説明を要約すると:
文字列をすべて「巡回シフト」した行列を作る
その行列を辞書順にソートする
右端の列だけを取り出す
さらに「元の行がどこに行ったか」の番号を記録する → これが BWT の出力
例: cacao → BWT → ccoaa, 3
この変換によって、 同じ文字が固まりやすくなる → 圧縮しやすい。
逆変換(復号)はどうする?
逆変換は少し複雑ですが、検索結果の説明をまとめると:
BWT の出力文字列をソートすると「左端の列」が得られる
左端と右端の対応関係を追うことで、元の巡回行列を復元できる
その中から元の行を取り出すと、元の文字列が復元される
数学的には「安定ソート」が鍵になっています。
✅ なぜ圧縮に強いのか
BWTは「圧縮そのもの」ではなく、 圧縮しやすい形に並べ替える前処理 です。
同じ文字が連続しやすくなる
MTF や RLE と相性が良い
結果として高圧縮率が得られる
自然言語のようにパターンが多いデータに特に強い。
✅ まとめ
ロウズ=ウィーラー変換(BWT)は可逆変換
データを圧縮しやすい形に並べ替える
bzip2 などで使われている
巡回シフト → ソート → 右端列抽出
逆変換も可能
MTF・RLE・エントロピー符号と組み合わせて高圧縮
必要であれば、 BWT の手計算例をあなたの好きな文字列で一緒にやる こともできます。
了解です。では、Burrows–Wheeler Transform(ロウズ=ウィーラー変換)について、検索結果に基づいて正確にまとめ直しますね。
Burrows–Wheeler Transform(BWT)とは
検索結果によると、BWT は データ圧縮のための可逆変換 で、1994 年に Michael Burrows と David Wheeler によって考案された手法です。
ポイントは:
元のデータを「圧縮しやすい形」に並べ替えるだけの変換
情報は失われない(完全に元に戻せる)
bzip2 などの圧縮アルゴリズムで使われている
仕組み(検索結果の要点)
検索結果の説明をまとめると:
✅ 1. 文字列の「巡回シフト」を全部並べる
例:cacao なら、
cacao
acaoc
caoca
aocac
ocaca のように、1 文字ずつ回転させたものを全部作る。
✅ 2. それらを辞書順にソートする
ソートすると、似たパターンが近くに並ぶ。
✅ 3. 右端の列だけを取り出す
これが BWT の出力文字列になる。
✅ 4. 元の行がどこに行ったかの番号も記録
これが復元に必要。
逆変換(復元)も可能
検索結果によると、
BWT の出力文字列をソートすると「左端の列」が得られる
左端と右端の対応関係を追うことで、元の行列を復元できる
そこから元の文字列を取り出せる
つまり、完全に元に戻せる可逆変換。
✅ なぜ圧縮に強いのか
検索結果の説明では、 BWT は圧縮そのものではなく、圧縮しやすい形に並べ替える前処理 とされています。
同じ文字が連続しやすくなる
Move-To-Front(MTF)や Run-Length Encoding(RLE)と相性が良い
結果として高圧縮率が得られる
自然言語のようにパターンが多いデータに特に強い。
✅ まとめ(検索結果に基づく)
Burrows–Wheeler Transform は 可逆のデータ変換
1994 年に Burrows と Wheeler が考案
巡回シフト → ソート → 右端列抽出
bzip2 などで使われる
圧縮しやすい形に並べ替えるのが目的
逆変換も可能
必要なら、あなたの好きな文字列で 実際に BWT を手計算でやってみることもできます。
では、文字列 GHUUJYTRD で Burrows–Wheeler Transform(BWT)を手計算してみます。
1. 元の文字列
GHUUJYTRD 長さは 9 文字とします。
2. 巡回シフトを全部作る
GHUUJYTRD
HUUJYTRDG
UUJYTRDGH
UJYTRDGHU
JYTRDGHUU
YTRDGHUUJ
TRDGHUUJY
RDGHUUJYT
DGHUUJYTR
3. これらを辞書順にソート
アルファベット順で先頭文字を見て並べ替えます。
DGHUUJYTR
GHUUJYTRD
HUUJYTRDG
JYTRDGHUU
RDGHUUJYT
TRDGHUUJY
UUJYTRDGH
UJYTRDGHU
YTRDGHUUJ
(この順が「ソート後の行列」です)
4. 「右端の列」を取り出す
各行の最後の文字だけを取り出します。
DGHUUJYTR
GHUUJYTRD
HUUJYTRDG
JYTRDGHUU
RDGHUUJYT
TRDGHUUJY
UUJYTRDGH
UJYTRDGHU
YTRDGHUUJ
右端の文字を順に並べると:
R D G U T Y H U J
なので、BWT 出力文字列は:
RDGUTYHUJ
5. どの行が元の文字列か
元の文字列は GHUUJYTRD でした。 これはソート後の行列の 2 行目 にあるので、
BWT の結果:
RDGUTYHUJ元の行番号:
2
結論
文字列 GHUUJYTRD に対する Burrows–Wheeler Transform の結果は
BWT( GHUUJYTRD ) = 「RDGUTYHUJ」, 行番号 2
になります。
2025年12月12日 | カテゴリー:AUTODOCK VINA,CLUS PRO/BIOINFORMATICS, 自然科学的基礎知識//物理学、統計学、有機化学、数学、英語 |




