http://ja.wikipedia.org/wiki/7-Zip参照。

同じファイルをzip形式で圧縮すると元ファイルの70パーセント位の容量になり、7-Zipで圧縮したら50パーセント位になりました。
どちらも可逆圧縮でありながら、なぜこんなにも圧縮率が違うのでしょうか。
原理をできるだけ、わかりやすく教えていただけますか?

回答の条件
  • 1人2回まで
  • 登録:2008/12/14 16:26:51
  • 終了:2008/12/16 19:05:09

ベストアンサー

id:hujikojp No.3

hujikojp回答回数101ベストアンサー獲得回数72008/12/16 04:55:51

ポイント35pt

全体的に言えば、ハードウェアの進歩に合わせて調整し直したので圧縮率が高くなった、といえるのでは。

まず、前提として 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...

id:Gleam

回答ありがとうございます。

よくわかりました。

2008/12/16 19:03:43

その他の回答(2件)

id:goodvn No.1

goodvn回答回数228ベストアンサー獲得回数182008/12/14 17:04:10

ポイント25pt

7-Zip で使われている LZMA というアルゴリズムは,辞書式圧縮という考え方です

一度出てきたバイナリの並びを繰り返さず,辞書に対するポインタに置き換えることで,高圧縮率を実現します

類似のアルゴリズムで,LZMA の姉妹アルゴリズムとも言えず,LZ78 ですが,Wikipedia 内に概念の説明があります

http://ja.wikipedia.org/wiki/LZ78

ZIP形式は,Deflate というアルゴリズムで,これも考え方としては似ています

圧縮方式は,圧縮率の高低だけで語れないものなので,高圧縮率だから良い,というものでもありません.適材適所といえます.例えば,圧縮形式と言った場合,アーカイバ + ファイル圧縮の 2つの機能(最近では,これに暗号化を加えた 3つの機能)が内包されます

アーカイバとは,複数のファイルをまとめる機能の事で,ZIP や 7-Zip にはありますが,一方で非常にポピュラーな圧縮形式である,GZIP や BZIP2 にはありません

アーカイバでは,ファイルを格納するデータベースを持つため,このデータベースに何を格納できるか(ファイル名,パーミッション,ファイル属性など),ファイル名にどのような文字コードが使えるのか,という違いがあります

ファイル圧縮だけを見ても,圧縮と展開でどちらが得意なのか,という違いがあります.GZIP は圧縮率自体はそれほど高くないのですが,圧縮も展開もそこそこ速く,リソースも使わないため,現場ではよく使われます

他にも,ビットレベルのエラーに対する耐性,エラー訂正の性能なども違いがあります

また,技術的な要素だけでなく,アルゴリズムに対する特許権などライセンス関係の問題,開発コミュニティの違いなど,圧縮形式を選択することは,容易ではないかも知れません

id:Gleam

回答ありがとうございます。

2008/12/14 17:24:59
id:yuuku No.2

yuuku回答回数80ベストアンサー獲得回数02008/12/14 17:10:55

ポイント20pt

7-Zip - Wikipedia

圧縮方法は新しい方法が発見発明されていくので、新しい圧縮方法が圧縮率が高くなるようですね。

ギリシャ文字, ルーン文字, 7-Zip - faireal.net

元のデータが7-zipが圧縮しやすい形のデータだったのかもしれませんね。

id:Gleam

回答ありがとうございます。

2008/12/14 17:32:12
id:hujikojp No.3

hujikojp回答回数101ベストアンサー獲得回数72008/12/16 04:55:51ここでベストアンサー

ポイント35pt

全体的に言えば、ハードウェアの進歩に合わせて調整し直したので圧縮率が高くなった、といえるのでは。

まず、前提として 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...

id:Gleam

回答ありがとうございます。

よくわかりました。

2008/12/16 19:03:43

コメントはまだありません

この質問への反応(ブックマークコメント)

トラックバック

  • 圧縮形式の選択 緑茶は命の水 2008-12-16 10:02:50
    圧縮方式は,圧縮率の高低だけで語れないものなので,高圧縮率だから良い,というものでもありません.適材適所といえます.例えば,圧縮形式と言った場合,アーカイバ + ファイル圧
「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません