可逆圧縮
可逆圧縮(かぎゃくあっしゅく)とは、圧縮前のデータと、圧縮・展開の処理を経たデータが完全に等しくなるデータ圧縮方法のこと[1]。ロスレス圧縮[1](ロスレスあっしゅく)、無歪み圧縮(むゆがみあっしゅく)[2]とも呼ばれる。
アルゴリズム
編集すべてのデータを効果的に圧縮できる可逆圧縮アルゴリズムは存在しない(可逆圧縮の限界の節を参照)。そのため、データの種類によって多くのアルゴリズムが存在する。下記に主要な可逆圧縮方式を列挙する。
データ全般
編集- 算術符号 - エントロピー符号の一種
- ハフマン符号 - エントロピー符号の一種
- LZ77、LZ78 - 辞書式圧縮の一種
- Lempel-Ziv-Markov chain-Algorithm (LZMA) - 7z、xzで使用される
- Lempel–Ziv–Storer–Szymanski (LZSS) - WinRARでハフマン符号とともに使用される
- Lempel–Ziv–Welch (LZW) - GIF、UNIX Compressで使用される
- ブロックソート - 圧縮の前処理で使用される可逆変換
- Prediction by Partial Matching (PPM) - プレーンテキストの圧縮で使用される
- 連長圧縮
音声
編集- ATRAC Advanced Lossless (AAL)
- Apple Lossless (ALAC)
- FLAC
- Monkey's Audio (APE)
- MPEG-4 ALS
- MPEG-4 SLS
- Shorten (SHN)
- TTA
- WavPack
- Windows Media Audio Lossless
ラスターイメージ
編集- AV1 Image File Format (AVIF)
- JPEG XL - ロスレスモードあり
- JPEG XR - ロスレスモードあり
- Lossless JPEG
- Portable Network Graphics (PNG)
- QOI
- Tagged Image File Format (TIFF)
- WebP
可逆圧縮の限界
編集可逆圧縮アルゴリズムはすべての入力データに対して圧縮後のデータサイズが圧縮前より小さいことを保証できない。すなわち、どのような可逆圧縮アルゴリズムでも圧縮処理後にデータサイズが小さくならない入力データが存在し、また圧縮処理後にデータサイズが小さくなる入力データが存在する場合、圧縮処理後にデータサイズが大きくなる入力データも必ず存在する。前者の証明は下記の通り[3]。
- すべての入力データを小さくできるアルゴリズムの場合、アルゴリズムを繰り返して適用することでデータサイズを1ビットにできる。
- しかし、1ビットでは記録できる情報が2種類しかなく、解凍が明らかに不可能である。
- したがって、前提である「すべての入力データを小さくできるアルゴリズムが存在する」が成立しない。
後者の証明は鳩の巣原理を用いたものであり、下記の通りとなっている[3][4]。
- 「圧縮処理後にデータサイズが小さくなる入力データが存在し、圧縮処理後にデータサイズが大きくなる入力データが存在しない」と仮定する。
- 圧縮処理後にデータサイズが小さくなる入力データのうち、最も小さい入力データをFとし、そのデータサイズをMとする。Fの圧縮処理後のデータサイズをNとする(MとNの単位はビット)。
- 圧縮処理後にデータサイズが小さくなるため、N < Mである。さらに圧縮処理後にデータサイズが大きくなる入力データが存在しないため、Nビットのデータは圧縮処理後もNビットとなる。
- Nビットのデータは2N種類ある。前述のNと合わせ、圧縮処理後にNビットとなるデータは少なくとも2N+1種類存在する。
- しかしNビットのデータが2N種類しかないので、鳩の巣原理により少なくとも2種類のデータが圧縮後同じデータになり、解凍が不可能(どちらに戻すべきか判別できない)である。
- したがって最初の仮定は誤りであり、「圧縮処理後にデータサイズが小さくなる入力データが存在しない」(可逆圧縮アルゴリズムではない)か「圧縮処理後にデータサイズが大きくなる入力データが存在する」となる。
このようにすべてのデータを圧縮できるアルゴリズムは数学上存在しえないが、インターネット・バブル期にはAdam's Platform(1998年)、NearZero(2001年)などそのようなアルゴリズムを発明したと主張するベンチャーが複数存在した[3]。実際の処理では圧縮を行わず、入力データを別のフォルダにコピーし、「圧縮」された偽ファイルに置き換えただけであり、「解凍」のときは別のフォルダにコピーした入力データを元に戻しただけである[3]。
可逆圧縮アルゴリズムのベンチマークにはカルガリーコーパスが広く使われている[5][6]。サイズ、速度、メモリ使用量がトレードオフの関係にあり、たとえばデータ圧縮比が高いアルゴリズムはメモリ使用量が多い場合が多い[6]。
出典
編集- ^ a b c 「可逆圧縮」『ASCII.jpデジタル用語辞典』 。コトバンクより2023年9月5日閲覧。
- ^ 「無歪み圧縮」『世界大百科事典』 。コトバンクより2023年9月5日閲覧。
- ^ a b c d Bell, Tim (28 September 2015). "Surprising Computer Science". In Brodnik, Andrej; Vahrenhold, Jan (eds.). Informatics in Schools. Curricula, Competences, and Competitions. 8th International Conference on Informatics in Schools: Situation, Evolution, and Perspectives (英語). Vol. 9378. Springer. pp. 8–9. doi:10.1007/978-3-319-25396-1. ISBN 978-3-319-25396-1. S2CID 26313283。
- ^ Sayood, Khalid, ed. (18 December 2002). Lossless Compression Handbook (Communications, Networking and Multimedia) (英語) (1 ed.). Academic Press. p. 41. ISBN 978-0-12390754-7。
- ^ 岩間大輝、石田崇、後藤正幸「アルファベットサイズが未知の情報源に対する効率的なベイズ符号化法の一考察」『第10回情報科学技術フォーラム』議事録、2011年8月22日、153頁(日本語)。
- ^ a b Mahoney, Matt (2010). "Data Compression Explained" (PDF) (英語). p. 3. 2023年9月5日閲覧。