【第7章 圧縮法の性能比較と各種圧縮ツール】
以上、よく利用される代表的な圧縮法の概略を紹介しましたが、色々な圧縮法を知れば、その性能を比較してみたくなるのが人情というものです。
しかし圧縮法の性能はコンピュータのベンチマークテストと同様、対象とするファイルのデータ内容、プログラム化の方法、ハードウェア環境等によって大きく異なり、簡単には比較できません。
それでも色々な参考書にはたいてい各種圧縮法の性能を評価した結果が載っていますので、それらの結果と、僕が適当に試した結果を総合し、独断と偏見でおおざっぱな目安をつけてみたいと思います。
(1) 圧縮率
やはり最も気になるのが圧縮率ですが、だいたい以下のような順で圧縮率が良いと思われます。
LZ78符号 ≒ LZ77符号 >> 算術符号 > ハフマン符号 >> 連長符号
圧縮率の目安としては、通常のテキストファイルを対象とした場合、LZ78符号とLZ77符号が40〜50%、つまりほぼ半分以下に圧縮し、算術符号が60〜70%、ハフマン符号が算術符号よりも数%大きくなり、連長符号は80〜90%程度です。
プログラムなどのバイナリファイルを対象とした場合は、テキストファイルよりも10〜20%ほど大きくなります。
連長符号はテキストファイルやプログラムファイルでは圧縮率が悪く、時には元のファイルよりも大きくなってしまうことさえありますが、同じコードが連続する画像ファイルでは比較的圧縮率が良いので、主に画像データの圧縮に用いられます。
(2) 圧縮/展開速度
次に圧縮/展開速度ですが、だいたい以下のような順で速度が速いと思われます。
・圧縮速度
連長符号 >> ハフマン符号 > 算術符号 > LZ78符号 >> LZ77符号
ハフマン符号と算術符号は2パスで符号化しますが、1パスで符号化するLZ符号よりも圧縮速度が速くなっており、各手法の解説で説明した特徴と矛盾しています。
これは次のような事情によるものです。
ハフマン符号と算術符号の符号化過程そのものはLZ符号よりも速いのですが、ファイルの2度読み部分が律速段階となっていて、ファイルの読み書きが非常に遅かった頃はLZ符号よりも遅いのが普通でした。
ところが最近のコンピュータはファイルの読み書きが非常に速くなり、全体としてLZ符号よりも高速になったのです。
またメモリも多量に使えるようになったので、プログラムによっては最初にファイルを全てメモリに読み込んでしまい、メモリ上で記号の集計と符号化を高速に行うものもあります。
・展開速度
連長符号 >> ハフマン符号 > LZ77符号 > 算術符号 > LZ78符号
ほとんどの圧縮法は圧縮速度よりも展開速度の方が速く、特にLZ77符号は圧縮速度に比べて展開速度が非常に速いのが特徴です。
それに対して、LZ78符号は圧縮速度と展開速度がほとんど変わりません。
・総合処理速度
圧縮と展開を合計した総合処理速度は、だいたい以下のようになります。
連長符号 >> ハフマン符号 > 算術符号 > LZ78符号 > LZ77符号
一応、順序としてはこのようになりますが、各手法の速度の差はそれほど大きくなく、実質上はほとんど問題にならない程度です。
ハードウェアの驚異的な進歩により、圧縮/展開速度は以前ほど重要なファクターではなくなったと言えるでしょう。
以上、圧縮率と圧縮/展開速度を総合しますと、現在のところLZ78符号が一番多用されている理由が何となく納得できると思います。
ただしこれらの性能比較は、僕の独断と偏見による単なる目安にすぎませんので、自分で試してみたところこれとは違う結果が出たとしても、当局は一切関知しませんのでそのつもりで……。(^^;)
実際の圧縮ツールではこれまで説明しました圧縮法をそのまま単独で用いることは少なく、たいていは数種類の圧縮法を組み合わせ、圧縮率と圧縮/展開速度を向上させるような工夫をしています。
それらの圧縮ツールのうち、代表的なものの特徴をまとめると以下のようになります。
(1) LHa
圧縮法:LZH法(LZ77符号のバリエーションのひとつであるLZSS符号+ハフマン符号)
OS:MS-DOS、UNIX、Macintosh等
特徴:高圧縮でアーカイブ機能も持つ圧縮アーカイバの代表的存在。
パソコン通信ネット上で公開されたフリーソフトの上、仕様を公開しているので、コンパチブルな圧縮ツールも多数開発されている。
日本における標準圧縮ツールであり、世界でも広く利用されている。
(2) PKZIP/PKUNZIP
圧縮法:LZH法のバリエーション(LZSS符号+適応型ハフマン符号)
OS:MS-DOS、UNIX、Macintosh等
特徴:高圧縮・高速の圧縮アーカイバ。
アメリカのPKWARE社がLHAに対抗して開発したもので、圧縮/展開の高速性が特徴のシェアウェア。
前身であるZIP/UNZIPとともに、欧米における標準的圧縮ツールとなっている。
(3) DIET
圧縮法:DLZ符号(LZ77符号のバリエーション)
OS:MS-DOS
特徴:自己解凍型圧縮実行ファイルを作成する圧縮ツール。
自己解凍型圧縮実行ファイルは、メモリにロードされると自己解凍してメモリ上に展開し、そのまま実行するプログラムファイルで、展開速度が速いというLZ77符号の特長をうまく生かしている。
ディスク容量の少ないMS-DOS時代は頻繁に利用されたが、Windowsの時代となってからはあまり利用されていない。
(4) compress
圧縮法:LZW符号の改良版であるLZC符号
OS:UNIX
特徴:UNIXシステムにおける標準的圧縮ツール。
アーカイブ機能はない。
UNIXにはcompress以外にも実用的なコンピュータ世界では最初の圧縮ツールであったcompactもあるが、これは適応型ハフマン符号に基づいたもので、圧縮率、圧縮速度ともにcompressよりも劣っているので、現在では歴史的な価値しか持っていない。
(5) gzip/gunzip
圧縮法:LZSS符号+シャノン・ファノ符号
OS:UNIX
特徴:高圧縮な圧縮ツールで、compressと同様、アーカイブ機能はない。
PKZIPの前身であるZIPを参考にしてGNUで開発されたもので、compressよりも高圧縮の上、PDSなのでUNIXにおける準標準的圧縮ツールとなっている。
UNIXの世界には以前からアーカイバツールarまたはtarがあったので、圧縮アーカイブを作成するには、arまたはtarで作成したアーカイブファイルをcompressまたはgzipで圧縮するのが普通である。
(6) StuffIt
圧縮法:LZC符号またはハフマン符号
OS:Macintosh
特徴:Macintoshにおける標準的圧縮アーカイバ。
比較的古い圧縮アーカイバで、MS-DOSにおけるZIPに相当するもの。
(7) Compact Pro
圧縮法:連長符号+LZSS符号+ハフマン符号
OS:Macintosh
特徴:これは実際に使ったことがないのでよくわかりまへん、誰か教せーてくで〜っ!(^^;)/
(8) V.42 bis
圧縮法:LZW符号
特徴:通信モデムの標準規格であるITU-T(旧CCITT)規格で用いられているデータ圧縮法。
圧縮ツールではないが、一応、紹介まで。(^_-)