同じファイルをzip形式で圧縮すると元ファイルの70パーセント位の容量になり、7-Zipで圧縮したら50パーセント位になりました。
どちらも可逆圧縮でありながら、なぜこんなにも圧縮率が違うのでしょうか。
原理をできるだけ、わかりやすく教えていただけますか?
全体的に言えば、ハードウェアの進歩に合わせて調整し直したので圧縮率が高くなった、といえるのでは。
まず、前提として zipも 7kも圧縮算法は LZ77をベースにしたものといえます(これはlharcなども同じです)。
そのうえで何が違うかをさぐると、Wikipediaを読む限り主因としては2つ:
1. 後段に Huffman圧縮ではなく算術圧縮を利用した。
算術圧縮は、理論的には Huffmanより高圧縮率になることは知られていたが、圧縮時の計算量が多いので以前は用いられなかった。近年のCPU能力の向上によって実用になった。
2. LZ77の辞書を 32KiBではなく 32MiBにした。
これも近年のRAMの増加によるものですね。
それ以外にもいろいろチューンが入っているはずですが。
参考に bzip2も含めた簡単な比較が以下に:
http://blogs.reucon.com/srt/2008/02/18/compression_gzip_vs_bzip2...
7-Zip で使われている LZMA というアルゴリズムは,辞書式圧縮という考え方です
一度出てきたバイナリの並びを繰り返さず,辞書に対するポインタに置き換えることで,高圧縮率を実現します
類似のアルゴリズムで,LZMA の姉妹アルゴリズムとも言えず,LZ78 ですが,Wikipedia 内に概念の説明があります
http://ja.wikipedia.org/wiki/LZ78
ZIP形式は,Deflate というアルゴリズムで,これも考え方としては似ています
圧縮方式は,圧縮率の高低だけで語れないものなので,高圧縮率だから良い,というものでもありません.適材適所といえます.例えば,圧縮形式と言った場合,アーカイバ + ファイル圧縮の 2つの機能(最近では,これに暗号化を加えた 3つの機能)が内包されます
アーカイバとは,複数のファイルをまとめる機能の事で,ZIP や 7-Zip にはありますが,一方で非常にポピュラーな圧縮形式である,GZIP や BZIP2 にはありません
アーカイバでは,ファイルを格納するデータベースを持つため,このデータベースに何を格納できるか(ファイル名,パーミッション,ファイル属性など),ファイル名にどのような文字コードが使えるのか,という違いがあります
ファイル圧縮だけを見ても,圧縮と展開でどちらが得意なのか,という違いがあります.GZIP は圧縮率自体はそれほど高くないのですが,圧縮も展開もそこそこ速く,リソースも使わないため,現場ではよく使われます
他にも,ビットレベルのエラーに対する耐性,エラー訂正の性能なども違いがあります
また,技術的な要素だけでなく,アルゴリズムに対する特許権などライセンス関係の問題,開発コミュニティの違いなど,圧縮形式を選択することは,容易ではないかも知れません
回答ありがとうございます。
圧縮方法は新しい方法が発見発明されていくので、新しい圧縮方法が圧縮率が高くなるようですね。
ギリシャ文字, ルーン文字, 7-Zip - faireal.net
元のデータが7-zipが圧縮しやすい形のデータだったのかもしれませんね。
回答ありがとうございます。
全体的に言えば、ハードウェアの進歩に合わせて調整し直したので圧縮率が高くなった、といえるのでは。
まず、前提として zipも 7kも圧縮算法は LZ77をベースにしたものといえます(これはlharcなども同じです)。
そのうえで何が違うかをさぐると、Wikipediaを読む限り主因としては2つ:
1. 後段に Huffman圧縮ではなく算術圧縮を利用した。
算術圧縮は、理論的には Huffmanより高圧縮率になることは知られていたが、圧縮時の計算量が多いので以前は用いられなかった。近年のCPU能力の向上によって実用になった。
2. LZ77の辞書を 32KiBではなく 32MiBにした。
これも近年のRAMの増加によるものですね。
それ以外にもいろいろチューンが入っているはずですが。
参考に bzip2も含めた簡単な比較が以下に:
http://blogs.reucon.com/srt/2008/02/18/compression_gzip_vs_bzip2...
回答ありがとうございます。
よくわかりました。
回答ありがとうございます。
よくわかりました。