圧縮・解凍とは
圧縮・解凍とは、データのサイズを効率的に管理するための方法です。
圧縮はデータのサイズを小さくし、解凍は小さく圧縮したデータを元のサイズに戻すことをいいます。
この2つは必ずセットで行われます。圧縮されたデータは解凍しない限り、編集することはできません。
なぜ圧縮・解凍するのか
データを圧縮することで、ストレージ(デバイスにデータを保管する場所)内でより少ない容量で保存でき、データ送信の際の転送時間を短縮することができます。
特に、インターネットを介したファイル転送では、帯域幅(単位時間当たりに転送できるデータ量)を節約できるため、効率的です。また、複数のファイルを1つにまとめることできるため、管理が容易になります。
解凍は圧縮されたファイルを元のサイズに戻すことで、通常のファイルと同じように扱えるようにします。解凍することで、元のファイル形式やデータ構造に戻り、利用できるようになります。特定の圧縮方法では、データの損失がないため、品質を保ったまま保存できるメリットがあります。
圧縮と解凍は、特に大量のデータを扱う現代のデジタル環境において、効率性と利便性を向上させる重要な技術です。
圧縮の仕組み
圧縮は、元のデータをより小さいデータに変換することで行います。
代表的なものに「ハフマン符号化」「ランレングス圧縮」「辞書式圧縮」があります。
ハフマン符号化
1952年にデビット・ハフマンによって考案されました。符号化とは、データを「0」と「1」の2進数に変換することです。
ハフマン符号化では、データの出現頻度に注目し、多く出現するデータに短い符号を、あまり出現しないデータには長い符号を割り振ることで圧縮します。また、圧縮率は文字の出現頻度によって変わります。
例えば、圧縮していないデータ「A」の符号が「000」である場合、「A」が3回出現した際は符号が「000000000」になりますが、ハフマン符号化を用いて頻出のデータ「A」に「0」を割り振った場合、「AAA」の符号は「000」となります。
ランレングス圧縮
連長圧縮とも呼びます。
ランレングス圧縮では、データが何個連続しているかを「データ1つ分と連続した長さ」で表します。
例えば、「AAAAABBCCCDDDD」というデータがあった場合、「A5B2C3D4」とすることができます。ランレングス圧縮の欠点は、データが連続していないと圧縮後のほうが元のデータより大きくなってしまう点です。そのため、白黒画像のようなデータの符号化に有効です。
辞書式圧縮
データの中でよく使われる部分を辞書に登録し、それに対して短いコードやインデックスを割り当てることで、全体のサイズを小さくします。
例えば、「圧縮」に1、「と」に2、「解凍」に3を割り当てたとすると、「圧縮と解凍」は「123」で表せるという手法です。代表的なものに「LZW(Lempel-Ziv-Welch)」があります。LZWでは、圧縮する際に新しいパターンが見つかると辞書に追加され、次回以降はその辞書を参照して圧縮を行います。
解凍の仕組み
解凍は、圧縮方法を判別し、それを遡るように復元を行います。
以下のようなステップで行います。
圧縮データの読み込み
解凍するためのプログラムは、圧縮ファイル(zip、7zなど)を開き、圧縮されたデータを読み込みます。
圧縮方法の識別
圧縮ファイルには、使用された圧縮方法は何かという情報が含まれているため、解凍プログラムはこれを読み取り、解凍するにはどうすれば良いかを判断します。
データの復元
ファイルの圧縮方法に基づいて、圧縮されたデータを元の形に復元します。ランレングス圧縮であれば、「A4B2C3D1」を「AAAABBCCCD」に戻す工程です。
ファイルの書き出し
解凍されたデータは、指定された場所に新しいファイルとして書き出されます。
圧縮方法
圧縮は、「可逆圧縮」と「非可逆圧縮」という2種類に分けられます。
可逆圧縮
可逆圧縮は、解凍時に完全に圧縮前と同じ状態に復元できる圧縮方法です。データの品質が変わらないため、主にExcelやWordなどの文書、数値データなど、変わってほしくないデータの圧縮に使用されます。
可逆圧縮で圧縮するファイルには以下のようなものがあります。
- ZIP
- 7Z
- PNG
- FLAC
非可逆圧縮
非可逆圧縮は、解凍時に細部のデータが一部欠落する圧縮方法です。データの品質は可逆圧縮に劣りますが、圧縮率は非可逆圧縮のほうが高いです。主に、映像、音声、画像などの細部が変わっても人間が認識しにくいデータの圧縮に使用されます。
非可逆圧縮で圧縮するファイルには以下のようなものがあります。
- JPEG
- MP3
- MPEG
まとめ
今回は、圧縮と解凍について解説しました。
圧縮方法はデータの種類や目的に応じて選択することが重要です。圧縮・解凍を理解することは、効率的にデータを管理し、必要な時にスムーズに扱うことに役立ちます。
ぜひ実践してみてください。
無料のプログラミングスクール「テクドリ」の卒業生のインタビュー動画を、インスタグラムほか公式SNSにて公開中!