ファイルをひとまとめにすることは難しいことではないので説明を省かせていただきます。
それではファイルの圧縮について説明したいと思います。基本的には冗長性を利用して圧縮します。例えば
「ラララララー」をという言葉の場合、「ラ」が5回続くので、
「ラ×5回ー」と表現します。 5回繰り返すという定義をどうするかという問題がありますが、原理的にはこうして圧縮します。これをランレングス法といいます。
5文字連続ですと圧縮効果も出てきますが、2、3文字だと圧縮効果は低くなります。そこで繰り返しの単位を1文字単位ではなく複数の文字の組み合わせまで拡張する事にします。
「This_is_a_pen.」 (わかりやすくするためにスペースの代わりに _ :アンダースコア を使っています)という文で考えます。よく見ると「is_」が2回繰り返しています。
「Th(is_)×2回a_pen.」と表現します。こうすると繰り返しは1回ですが3文字分圧縮できます。
しかしこのようにうまく繰り返しの単位が続けば良いのですが、そうも行かないので「辞書」と言う物を導入します。 今度は
「This_is_his_pen.」という文です。やはり「is_」が3回見られますので、
「Th##h#pen.」(辞書:#="is_")と表現します。今度は繰り返しが3回になりますので大分圧縮できました。長いデータになればこういう組み合わせも沢山出てきますので、圧縮効率は更に上がると考えられます。これをLZW法と言います。
もう1つ重要な圧縮方式があります。ハフマン法といいます。これはLHAなどでも用いられている方式です。
基本的な原理は
出現頻度の高いコードに少ないビット数を割り当てて、出現頻度の低いコードに多いビット数を割り当てるということです。
と比較的短くて簡単な符号となっています。一方F L Q Yの様な符号は覚えにくく (対母音比@hide) 符号も長めです。しかし、出現頻度の少ない文字なのであまり問題となりません。つまり多く出現する文字を短くしておくことで全体の符号の数を減らせるように作られています。ちなみに和文モールスはその辺を無視して作っているとしか思えません(^_^;)
A E I U O F L Q Y ・− ・ ・・ ・・− −−− ・・−・ ・−・・ −−・− −・−−
多くの圧縮方式はこのような原理に基づいて圧縮します。冗長性・コードの探し方、1度に探す領域の大きさ、「辞書・対応表」の構造などで圧縮率や処理速度が変わります。そのため多数の方式が出ています。
また、画像の圧縮に使われるGIFやJPEGについては画像特有の規則性・人間の目の特性を利用して圧縮しています。JPEGは不可逆圧縮でして、展開しても100%同じ絵にはなっていませんが、人間の目の特性を利用して自然に見えるようになっています。特に写真に向いています。一方GIFは可逆圧縮で、展開してもそっくりそのまま復元できます。しかし、現在のフォーマットでは256色しか扱えませんので原色が多く使われる、ロゴやボタン、アニメ的な絵(悪い意味ではありません)に向いていると言えます。VIDEO-CD、DVD-VIDEOやPrefecTVでもJPEG同様の圧縮技術を用いています。画像が出たついでに音声の圧縮についても軽く説明します。最近ブレイクしてきたMDも不可逆圧縮の代表です。これも人間の聴覚特性を利用してデータ量を減らしています。デジタル携帯電話、PHSも不可逆圧縮を行っています。
プログラムや文章は完全に復元されないと困りますので、この文書で取り扱うLHAやZIPに関しては当然「可逆圧縮」です。(文章の要約なら歓迎!という説もありますが(^_^;)