解説
圧縮と解凍は、コンピュータを利用していると必ずと言ってよいほど遭遇する言葉です。
圧縮は、データをアルゴリズム(一定の手順)によってコンパクトにまとめることです。解凍はその逆で、圧縮されたファイルを元に戻すことです。
圧縮アルゴリズムは、様々な方式が研究されており、多くのソフトウェアに組み込まれています。その方式の中から、いくつかを紹介します。
まずは、単純に出現数を置き換えたものです。同じようなデータが連続する場合に高い圧縮率となります。しかし、現実のファイルでは、あまり使う機会がないでしょう。
AAABBBBBAAAA ↓ Aが3回、Bが5回、Aが4回 ↓ A3B5A4
次は、辞書を作りながら圧縮していく方式です。単純な文字数よりも複雑です。「辞書にある文字+1文字」を、辞書に追加しながら、データを「辞書の位置+次の文字」に置き換えていきます。
ABABABA…… ↓ ┏━━━━━━━━━━━━━┳━━━━━━━━━━┳━┳━━━━━┓ ┃圧縮したデータ ┃辞書に追加する文字 ┃ ┃辞書 ┃ ┣━━━━━━━━━━━━━╋━━━━━━━━━━╋━╋━━━━━┫ ┃ ┃0番目に空文字 ┃→┃0 ┃ ┃0番目の辞書の値+A [0,A] ┃[A]BABABA……┃→┃1 A ┃ ┃0番目の辞書の値+B [0,B] ┃A[B]ABABA……┃→┃2 B ┃ ┃1番目の辞書の値+B [1,B] ┃AB[AB]ABA……┃→┃3 AB ┃ ┃3番目の辞書の値+A [3,A] ┃ABAB[ABA]……┃→┃4 ABA┃ ┗━━━━━━━━━━━━━┻━━━━━━━━━━┻━┻━━━━━┛ ↓ [0,A][0,B][1,B][3,A]……
また、出現率で符号化する方法もあります。出現数でツリーを作っていき、出現数の多い文字ほど、短い符号で表すことで、圧縮を行います。
ABCDEBCDECDE…… ↓ 出現率で木構造を作る 0/\1 / \ E 0/\1 D \ 0/\1 C \ 0/\1 B A ↓ 一意の表を作れる ┏━┳━━━━┓ ┃E┃0 ┃ ┃D┃10 ┃ ┃C┃110 ┃ ┃B┃1110┃ ┃A┃1111┃ ┗━┻━━━━┛ ↓ bitの並び順で置き換える 1111 1110 110 10 0 1110 110 10 0 110 10 0……
他にも様々な圧縮アルゴリズムが存在します。興味のある人は、調べてみるとよいでしょう。
サンプル
簡単な「圧縮と解凍」のサンプルです。同じ文字が連続する場合は、数値に置き換えます。
<html>
<head>
<title>「圧縮と解凍」のサンプル</title>
</head>
<body>
<pre><script type="text/javascript">
// 元のデータと出力
var datSource = "AAAABBBBCCCCABCDEFDDDDDEEEEE";
document.writeln("元のデータ : " + datSource.length + "\n"
+ datSource + "\n");
// 圧縮
var datCmprss = datSource.replace(/(.)\1*/g,
function(s, s1, s2) {
if (s.length == 1) {return s;}
return s[0] + s.length;
}
);
// 圧縮後データと出力
document.writeln("圧縮後のデータ : " + datCmprss.length + "\n"
+ datCmprss + "\n");
// 解凍
var datDecmp = datCmprss.replace(/([A-Z])(\d*)/g,
function(s, s1, s2) {
if (s2 == "") {return s1;}
return new Array(s2 * 1 + 1).join(s1);
}
);
// 解凍後データと出力
document.writeln("解凍後のデータ : " + datDecmp.length + "\n"
+ datDecmp + "\n");
</script></pre>
</body>
</html>
元のデータ : 28 AAAABBBBCCCCABCDEFDDDDDEEEEE 圧縮後のデータ : 16 A4B4C4ABCDEFD5E5 解凍後のデータ : 28 AAAABBBBCCCCABCDEFDDDDDEEEEE
この記事は参考になりましたか?
既に会員の方はを行ってください。
- マンガで分かるプログラミング用語辞典連載記事一覧
- この記事の著者
-
柳井 政和(ヤナイ マサカズ)
クロノス・クラウン合同会社 代表社員http://crocro.com/オンラインソフトを多数公開。プログラムを書いたり、ゲームを作ったり、記事を執筆したり、マンガを描いたり、小説を書いたりしています。「めもりーくりーなー」でオンラインソフト大賞に入賞。最近は、小説家デビューして小説も書いています(『裏切りのプログラム』他)。面白いことなら何でもOKのさすらいの企画屋です。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
