「圧縮ファイル」はこの項目へ転送されています。複数のファイルを一つのファイルにまとめることについては「アーカイブ (コンピュータ)」をご覧ください。
データ圧縮(データあっしゅく、英: data compression)とは、あるデータを、そのデータの実質的な内容(情報、あるいはその情報量)を可能な限り保ったまま、データ量を減らした別のデータに変換すること。高効率符号化ともいう。
データ圧縮は、データ転送におけるトラフィックやデータ蓄積に必要な記憶容量の削減といった面で有効である。しかし圧縮されたデータは、利用する前に伸長(解凍)するという追加の処理を必要とする。つまりデータ圧縮は、空間計算量を時間計算量に変換することに他ならない。例えば映像の圧縮においては、それをスムーズに再生するために高速に伸長(解凍)する高価なハードウェアが必要となるかもしれないが、圧縮しなければ大容量の記憶装置を必要とするかもしれない。データ圧縮方式の設計には様々な要因のトレードオフがからんでおり、圧縮率をどうするか、(非可逆圧縮の場合)歪みをどの程度許容するか、データの圧縮伸長に必要とされる計算リソースの量などを考慮する[1]。
データ圧縮には、可逆圧縮と非可逆圧縮の2種類がある。可逆圧縮は、統計的冗長性を特定・除去することでビット数を削減する。可逆圧縮では情報が失われない。可逆圧縮は、数値データや文書、プログラムなど、1ビットの変化で情報の価値が大きく毀損されるようなデータに対して用いられる。一方で、非可逆圧縮は不必要な情報を特定・除去することでビット数を削減する[2]。非可逆圧縮ではいくらかの情報が失われる。非可逆圧縮は、音声や画像、動画など、細部が変化しても情報の意味が変わりにくいデータに対して用いられる。
アナログ技術を用いた通信技術においては通信路の帯域幅を削減する効果を得るための圧縮ということで帯域圧縮ともいわれた。デジタル技術では、情報を元の表現よりも少ないビット数で符号化することを意味する[3]。
新たな代替技法として、圧縮センシングの原理を使ったリソース効率のよい技法が登場している。圧縮センシング技法は注意深くサンプリングすることでデータ圧縮の必要性を避けることができる。 可逆圧縮(かぎゃくあっしゅく)とは、圧縮データを復元した時に、圧縮前の入力データが完全に復元されるような圧縮方法である。基本的には、入力データの統計的冗長性(出現する符号の偏り、規則性)を利用して、情報を失うことなくより稠密なデータに変換する。例えば、画像には数ピクセル同じ色が並んだ領域がよくみられる。そこでピクセル単位に色情報を並べて表現する代わりに、「n個の赤のピクセル」という形で符号化できる。このような種類の方法は連長圧縮(RLE)と呼ばれる。また、多くの可逆圧縮で使われている方法として、出現頻度(確率)の高いものに短い符号を、出現頻度の低いものに長い符号を割り当てることで、データ全体でみたときの平均符号長を短くする方法がある。これをエントロピー符号化と呼び、具体的な方法としてハフマン符号化や算術符号化などがある。また、データを区間に区切って、それぞれで対応する符号を変えたり、n 個の連続した符号の列に対して符号を割り当てる方法(拡大情報源
可逆圧縮
LZ77 (Lempel?Ziv) およびそれを改良したLempel?Ziv?Storer?Szymanski (LZSS) という圧縮法は、可逆記録方法としては最もよく使われているアルゴリズムである[4]。DeflateはLZSSを伸長速度と圧縮率の面で最適化した派生技法だが、圧縮は時間がかかることがある。Deflateは、PKZIP
(英語版)、gzip、PNGで採用されている。Lempel?Ziv?Welch (LZW) はGIFで採用されている。また、LZR (Lempel-Ziv?Renau) アルゴリズムはZIPの基盤として採用されている。LZでは、データに繰り返し出現する記号列をテーブルを使って置換する方式を採用している。多くのLZ系の技法では、このテーブルを動的に生成しつつ入力を先頭から順次処理していく。テーブル自体はハフマン符号で符号化されることが多い(例えば、SHRI、LZX)。LZXはDeflateよりも効率が良く、マイクロソフトのCAB形式などで使われている。また、ハフマン符号に代わりRange Coderを採用したLZMAやLZMA2はさらに圧縮率が良い。圧縮効率が最も高い可逆圧縮法は乱択アルゴリズムを導入したもので Prediction by Partial Matching などがある。ブロックソートはデータの統計的モデリング技法であり、圧縮の前処理に使われる[5]。