【らんれんぐすふごうか】

ランレングス符号化 とは?

最終更新:
💡 「A、A、A、A」を「Aが4個」と言い換える圧縮術

同じ値が続く部分を「値と個数」の組でまとめて短くする、単純な可逆圧縮の方式。同じ値が長く続くデータでは効果が大きいが、連続が少ないとかえって大きくなる。

📌 このページのポイント
同じ値の連続を「値と個数」に 元のデータ:AAAABBBCC A A A A B B B C C 連続を数える A4 Aが4個 B3 Bが3個 C2 Cが2個 A4B3C2は説明用の表記 連続が少ないと大きくなることも ABCD → A1B1C1D1
同じ値が続く範囲をまとめる。保存形式は実装によって異なる。
ひよこ ひよこ
ランレングス符号化って何? 名前が難しそうだね。
ペンギン先生 ペンギン先生
同じ値が続いているところを「値と続く個数」でまとめる圧縮方法だよ。たとえば「AAAABBBCC」は「A4B3C2」と書けるんだ。ランは「連続」、レングスは「長さ」という意味だね。
ひよこ ひよこ
たしかに短くなったね! どんなデータで役に立つの?
ペンギン先生 ペンギン先生
同じ値が長く続くデータだよ。たとえば、白い背景が広がる単色に近い画像や、ファクシミリの白黒データがそうだね。ファクシミリの符号化では、白と黒の連続の長さを符号にする方式が使われているんだ。
ひよこ ひよこ
どんなデータでも小さくなるの?
ペンギン先生 ペンギン先生
ならないよ。連続が少ないデータだと、かえって大きくなることがあるんだ。たとえば「ABCD」を「A1B1C1D1」にすると、倍の長さになってしまうよね。
ひよこ ひよこ
圧縮したデータは、元に戻せるの?
ペンギン先生 ペンギン先生
戻せるよ。情報を捨てずに完全に復元できる可逆圧縮なんだ。値と個数を読み取って、その個数だけ並べ直すのが基本だよ。
ひよこ ひよこ
実際にはどこで使われているの?
ペンギン先生 ペンギン先生
たとえばBMPの8ビット画像にはRLE8という圧縮方式があるよ。列指向データベースのDuckDBでも、繰り返す値をまとめる圧縮に使われているんだ。保存形式によって連続長や制御符号の表し方が異なるので、説明用の「A4」をそのまま保存するとは限らないよ。
もっと詳しく知りたい人へ

A4という表記をそのまま保存すればよいですか?

A4は仕組みを示す概念例です。実際には値と個数を区別できるデータ形式が必要です。たとえばBMPのRLEには連続長と値を表すモードや制御用の符号があり、単純に文字と数字を並べるだけではありません。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ランレングス符号化」って出てきたら「同じ値の連続を、値と個数でまとめる単純な圧縮」と思えればだいたいOK!
📖 おまけ:英語の意味
「Run-Length Encoding」 = ランレングス符号化(連長符号化)
💬 Run(同じ値が続く範囲)のLength(長さ)を符号化(Encoding)するから、この名前だよ

参考資料

← 用語集にもどる