Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

圧縮アルゴリズムZopfli

5,095 views

Published on

Published in: Technology

圧縮アルゴリズムZopfli

  1. 1. 2013/04/14 圧縮アルゴリズムZopfli kazoo04 ! !         ___¦二ニー-、、;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:¦;::;:;:;:;:;:;:;:;:;:;:;:;:l         /rヽ三三三三三─--- 、;:;:;:;:;:;:;:¦;:;:;:;:;:;:;:;:;:;:;:;:;:;l         ',i ,-三三三三三、   _,.ニ、ー-、!;: --二 ̄彡′         ',、、ヾ三三'" ̄ ̄   `ー-"    ヾ-'"  .〉′         ヽ ヽヾ三,'    :::..,. --- 、     _,,..--、、,'          `ー',ミミ     ::.弋ラ''ー、   i'"ィ'之フ l          /:l lミミ     ::::.. 二フ́   l ヽ、.ノ ,'            ,.--フ:::::¦ ¦,ミ             l      /             /r-'":::::::::¦ ¦ヾ        /__.   l    /        _,. --"i .¦::::::::::::::::::',.',. \        ͡ヽ、,ノ   /ヽ,_              "    l ヽ:::::::::::::::::ヽヽ. \   _,_,.、〃  /l ¦    ___,. -、      ',\\:::::::::::::::ヽ\  \  、. ̄͡" ̄/:::::¦ ¦    ( ヽ-ゝ _i,.>-t--、      \\\;::::::::::::\\  `、.__  ̄́ ̄/::::::::::l ¦    `''''フく _,. -ゝ┴-r-、        ヽ \`ー-、::::::ヽ ヽ    ̄フフ::::::::::::::ノ ./   ,.-''"́ / ̄,./́ ゝ_'ヲ           `ー-二'-┴┴、__/-'-́二ー'".ノ   / _,. く  / ゝ_/ ̄¦                ̄`ー─--─-''" ̄      / にニ'/,.、-t-┴―'''''ヽ                               /  /  .(_ヽ-'__,.⊥--t-⊥,,_                               /  /  /   ̄   )  ノ__'-ノ                              /      /    ゝニ---、-   ¦                             /           /-<_   ヽ  ¦ヽ
  2. 2. Zopfli ✤ Googleが今年開発した圧縮アルゴリズム! ✤ zlib≒gzip≒zipと互換で、解凍は既存のもので可能! ✤ 圧縮率が3%∼8%ほど改善される! ✤ ただし圧縮にかかる時間は数十倍∼数百倍 _人人人人人_! > すごい <!  ̄Y^Y^Y^Y^ ̄
  3. 3. ( ^o^) < Zopfli は gzip 互換なのに無慈悲な圧縮率! ! ( ⊖ ) 。o(待てよ、どういう仕組みになってるんだ…?) ! ¦Google¦ ┗(☋` )┓三 ! ( ◠ ◠ )☛ソースコードを読め。あとRFC1951もな。 ! ▂▅▇█▓▒░('ω')░▒▓█▇▅▂うわあああああああ
  4. 4. Deflate ✤ zlibやgzipで使われてるアルゴリズムというか仕様! ✤ 要するにzip! ✤ 詳しくはRFC1951見て! ✤ アルゴリズムはLZ77を改良したLZSS + ハフマン符号
  5. 5. ふたつのポイント ✤ 良い感じにLZSS+Huffman符号化する! ✤ 良い感じにデータを分割する
  6. 6. LZSS(LZ77) ABCDEFABCDEFABCDEF! ! ↓! ! ABCDEF[6,6][12,6]! ! 6文字戻って6文字コピー 12文字戻って6文字コピー
  7. 7. それでいいかな? ABCDEFABCDEFABCDEF! ! ↓! ! ABCDEF[6,12]! ! より短い表現が可能(詳しくはRFC1951見て)
  8. 8. 結構いろんな表記方法がある ✤ いろんな表記があるものの、解凍した結果は同じ! ✤ グリーディーにやっていってもあまり圧縮率は良くない! ✤ 遅延評価的なことをしてなるべく短くなるようにする(Lazy Maching)! ✤ 真面目にやろうとすると遅くなるので普通は適当にやっておく! ✤ 最適な表記を探すのはNP困難らしい
  9. 9. Huffman符号化も考えると ✤ A = 65 = 01000001, B = 01000010, C = 01000011, ...! ✤ A, B, Cしか出現しないなら A = 00, B = 01, C = 11 にしたほうがいい! ✤ 各文字の出現率も考えて可変符号にするとまた変わってくる! ✤ Aがよく出現するなら A=0, B=10, C=11 とかね! ✤ A=0, B=1, C=10 じゃダメ!! ✤ “A Fast and Space-Economical Algorithm for Length-Limited Coding ”
  10. 10. じゃあ結局どうすればいいの ✤ レベルを上げて物理で殴ればいい! ✤ いろんな条件を何度も試して一番良かった奴を採用する
  11. 11. BlockSplitter ✤ 各シンボル(文字)の出現率は場所によって異なると考えられる! ✤ テキストと画像を一緒に圧縮するときとか顕著
  12. 12. BlockSplitter ✤ ときどきHaffman符号のテーブルを変えたほうがいい! ✤ でも変更したら変更したテーブルを保存しなきゃいけない! ✤ つまり余計に容量を食う! ! ✤ というトレードオフがある
  13. 13. じゃあ結局どうすればいいの ✤ レベルを上げて物理で殴ればいい! ✤ いろんな条件を何度も試して一番良かった奴を採用する
  14. 14. まとめ ✤ LZSSは同じデータでも色々な表現方法がある! ✤ しかもHuffman符号化やブロックの都合もある! ✤ 色々な条件で圧縮してみて一番小さくなったものを採用! ✤ zopfliは圧縮するときに何回施行するかオプションで指定できる
  15. 15. おわり ✤ 最適な組み合わせをメタヒューリスティックな方法で求めたりしたら 高速化できるんじゃね?(妄想)

×