連続する同じ値を「値と繰り返し回数」にまとめて圧縮する方式
ランレングス符号(RLE)とは、同じ値が連続している部分を「値とその繰り返し回数」のペアにまとめて、データを短く表す圧縮方式です。「Run(連続)」の「Length(長さ)」を記録するので、この名前がついています。
身近な例で言うと、点呼で「同じ返事が続くとき」をまとめる感覚です。「はい、はい、はい、はい」と 4 回言う代わりに「はいが 4 回」と言えば短く済みます。たとえば AAAABBBCC という 9 文字は、A4B3C2 という 6 記号で表せます。
上のツールでデータ列を入力すると、連続するまとまり(ラン)が色分けされ、それぞれが「値+回数」に変換される様子と、圧縮率がリアルタイムで表示されます。連続が長いデータほど圧縮率が良くなることを確かめてください。
RLE では、連続する 1 つのまとまり(ラン)を「値 1 つ+回数 1 つ」の 2 記号で表します。元データが n 文字でも、ランが k 個しかなければ符号は 2k 記号で済むので、ランが少ない(=連続が長い)ほど短くなるわけです。
どれだけ縮んだかは圧縮率で測ります。
・圧縮率 = 符号後の記号数 ÷ 元の長さ
・値が小さいほどよく圧縮できている(例: 50% なら半分になった)
・100% を超えると、かえってデータが増えている(圧縮失敗)
計算例として AAAABBBCCDAA(12 文字)を符号化すると A4B3C2D1A2 になります。ランは 5 個なので符号は 2×5 = 10 記号、圧縮率は 10 ÷ 12 ≈ 83% です。なお、ランが 1 文字だけ(連続なし)でも「値+回数」で 2 記号使うため、この部分はかえって長くなる点に注意しましょう。
RLE が威力を発揮するのは、同じ値が長く連続するデータです。逆に、連続がほとんどないデータには向かず、かえってサイズが増えてしまうこともあります。
向いているデータ/向いていないデータの例:
・向いている:白黒のFAX画像(白が長く続く)、ベタ塗りのアイコン、同じ値が並ぶセンサーデータ
・向いていない:自然の写真(色が細かく変化)、乱数、すでに圧縮済みのデータ
身近な例では、白い紙に黒い文字を書いた書類のFAX送信が典型です。1 行の大部分が白(背景)なので「白が何百ピクセル連続」とまとめれば大幅に縮みます。RLE は仕組みが単純で高速なため、画像形式のBMP(一部)やFAXのほか、より高度な圧縮の前処理としても使われます。RLE の性質として「連続が多いデータほど圧縮率が高い」「連続がないと逆効果」という点を押さえておくとよいでしょう。