圧縮アルゴリズムzopfli

15
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-⊥,,_ /  /  /  ‾   )  ノ__'-ノ /      /    ゝニ---、-   | /           /-<_   ヽ  |ヽ

Upload: kazuya-gokita

Post on 28-May-2015

2.660 views

Category:

Technology


5 download

TRANSCRIPT

Page 1: 圧縮アルゴリズムZopfli

2013/04/14

圧縮アルゴリズムZopflikazoo04

!!        ___|二ニー-、、;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:;:|;::;:;:;:;:;:;:;:;:;:;:;:;:l         /rヽ三三三三三─--- 、;:;:;:;:;:;:;:|;:;:;:;:;:;:;:;:;:;:;:;:;:;l         ',i ,-三三三三三、   _,.ニ、ー-、!;: --二‾彡′         ',、、ヾ三三'"‾‾   `ー-"    ヾ-'"  .〉′         ヽ ヽヾ三,'    :::..,. --- 、     _,,..--、、,'          `ー',ミミ     ::.弋ラ''ー、   i'"ィ'之フ l          /:l lミミ     ::::.. 二フ́   l ヽ、.ノ ,'            ,.--フ:::::| |,ミ             l      /             /r-'":::::::::| |ヾ        /__.   l    /        _,. --"i .|::::::::::::::::::',.',. \        ⌒ヽ、,ノ   /ヽ,_              "    l ヽ:::::::::::::::::ヽヽ. \   _,_,.、〃  /l |    ___,. -、      ',\\:::::::::::::::ヽ\  \  、.‾⌒"‾/:::::| |    ( ヽ-ゝ _i,.>-t--、      \\\;::::::::::::\\  `、.__ ‾́‾/::::::::::l |    `''''フく _,. -ゝ┴-r-、        ヽ \`ー-、::::::ヽ ヽ   ‾フフ::::::::::::::ノ ./   ,.-''"́ /‾,./́ ゝ_'ヲ           `ー-二'-┴┴、__/-'-́二ー'".ノ   / _,. く  / ゝ_/‾|               ‾`ー─--─-''"‾      / にニ'/,.、-t-┴―'''''ヽ                               /  /  .(_ヽ-'__,.⊥--t-⊥,,_                               /  /  /  ‾   )  ノ__'-ノ                              /      /    ゝニ---、-   |                             /           /-<_   ヽ  |ヽ

Page 2: 圧縮アルゴリズムZopfli

Zopfli

✤ Googleが今年開発した圧縮アルゴリズム!

✤ zlib≒gzip≒zipと互換で、解凍は既存のもので可能!

✤ 圧縮率が3%~8%ほど改善される!

✤ ただし圧縮にかかる時間は数十倍~数百倍

_人人人人人_!> すごい <!‾Y^Y^Y^Y^‾

Page 3: 圧縮アルゴリズムZopfli

( ^o^) < Zopfli は gzip 互換なのに無慈悲な圧縮率!

!

( ˘⊖˘) 。o(待てよ、どういう仕組みになってるんだ…?)

!

|Google| ┗(☋` )┓三

!

( ◠‿◠ )☛ソースコードを読め。あとRFC1951もな。

!

▂▅▇█▓▒░('ω')░▒▓█▇▅▂うわあああああああ

Page 4: 圧縮アルゴリズムZopfli

Deflate

✤ zlibやgzipで使われてるアルゴリズムというか仕様!

✤ 要するにzip!

✤ 詳しくはRFC1951見て!

✤ アルゴリズムはLZ77を改良したLZSS + ハフマン符号

Page 5: 圧縮アルゴリズムZopfli

ふたつのポイント

✤ 良い感じにLZSS+Huffman符号化する!

✤ 良い感じにデータを分割する

Page 6: 圧縮アルゴリズムZopfli

LZSS(LZ77)

ABCDEFABCDEFABCDEF!!

↓!!

ABCDEF[6,6][12,6]!!

6文字戻って6文字コピー12文字戻って6文字コピー

Page 7: 圧縮アルゴリズムZopfli

それでいいかな?

ABCDEFABCDEFABCDEF!!

↓!!

ABCDEF[6,12]!!

より短い表現が可能(詳しくはRFC1951見て)

Page 8: 圧縮アルゴリズムZopfli

結構いろんな表記方法がある

✤ いろんな表記があるものの、解凍した結果は同じ!

✤ グリーディーにやっていってもあまり圧縮率は良くない!

✤ 遅延評価的なことをしてなるべく短くなるようにする(Lazy Maching)!

✤ 真面目にやろうとすると遅くなるので普通は適当にやっておく!

✤ 最適な表記を探すのはNP困難らしい

Page 9: 圧縮アルゴリズムZopfli

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 ”

Page 10: 圧縮アルゴリズムZopfli

じゃあ結局どうすればいいの

✤ レベルを上げて物理で殴ればいい!

✤ いろんな条件を何度も試して一番良かった奴を採用する

Page 11: 圧縮アルゴリズムZopfli

BlockSplitter

✤ 各シンボル(文字)の出現率は場所によって異なると考えられる!

✤ テキストと画像を一緒に圧縮するときとか顕著

Page 12: 圧縮アルゴリズムZopfli

BlockSplitter

✤ ときどきHaffman符号のテーブルを変えたほうがいい!

✤ でも変更したら変更したテーブルを保存しなきゃいけない!

✤ つまり余計に容量を食う!

!

✤ というトレードオフがある

Page 13: 圧縮アルゴリズムZopfli

じゃあ結局どうすればいいの

✤ レベルを上げて物理で殴ればいい!

✤ いろんな条件を何度も試して一番良かった奴を採用する

Page 14: 圧縮アルゴリズムZopfli

まとめ

✤ LZSSは同じデータでも色々な表現方法がある!

✤ しかもHuffman符号化やブロックの都合もある!

✤ 色々な条件で圧縮してみて一番小さくなったものを採用!

✤ zopfliは圧縮するときに何回施行するかオプションで指定できる

Page 15: 圧縮アルゴリズムZopfli

おわり

✤ 最適な組み合わせをメタヒューリスティックな方法で求めたりしたら高速化できるんじゃね?(妄想)