|
|
ほぼ日刊エロリチェック・メール版ヌ 悔しがる中江でございます。 ■圧縮の基礎:ハフマン符号木 無性に書きたくなったので 今日はハフマン符号木の話。 ファイルの圧縮の基礎義仲です。 今、ひそかにやってることと ちょっと関係がある。 けど教えない。 だって俺はいじわるだからさ!!! ファイルサイズの節約は昔から好まれていました。 だって、ハードディスクどころか フロッピーですら、一枚ウン千円してたりしましたから。 すぐれた圧縮技術 → ものすごい経費節約 だったわけです。 今は昔ほどではないかもだけど。 いやそうでもないか。 ネットワーク越しのやりとりは圧縮がないときつい。 では具体的な話にいきますね。 うっふ〜ん ファイルの中身を調べて、 でてくる言葉の出現率を調べます。 たとえば 第一位 nakaechinpowooshaburi time ga machidooshiirorikkoatsumare! 30 回 第二位 ootto,sumoutoridomogamotsureaida! 20 回 第三位 konnashoujoga,midaranakakkouwo! 10 回 みたいな出現率だったとします。 ここで、一番出現率が高いものを短くします。 具体的には、出現率が高いフレーズを、 単純なビットで表すのです。 そうですね、 こんな例はどうでしょかね。 nakaechinpowooshaburi time ga machidooshiirorikkoatsumare! → 0 ootto,sumoutoridomogamotsureaida! → 10 konnashoujoga,midaranakakkouwo! → 110 このムダに長い、58 バイト(多分)あるフレーズを たった、0 という 1 ビットで表すことにします。 同様に、第二位のものを 10、 第三位のものを 110、とします。 第一位のフレーズは 30 回出てきてるので 単純計算で、58 x 30 - 1 x 30 / 8 = 1735.75 バイトの節約になります。 第二位や、第三位も同じようにして 単なるビットに変えていきます。 こうするとあらら不思議。 すんごい数の節約になっちゃいました。 解凍するときはこれと逆。 0 というビットを見つけたら第一位のフレーズに、 10 というのを見つけたら第二位のフレーズに変えていけばいいです。 一番出現率の高いフレーズを 0 というたった 1 ビットで表すのは やっぱ、一番でるものは短い方が圧縮効率がいいから。 フレーズごとにビットの長さが違うのは ビットの長さが同じだと非効率なのさ。 だって、出現率がすんごく違うフレーズに 同じ長さのビット割り当ててたら、なんか悲しいでしょ? 上に書いた例だと、全部で 70 ビットだけど それぞれに 2 ビット割り当てたら 120 ビット必要になるし。 ほとんどの圧縮アルゴリズムの基礎なお話でした。 実際使われてる圧縮プログラムはこれを応用して すんごく効率がいい方法をとってたり はたまた、まったく別の方法を使ってたりと 色々深く、ディープにやっているようです。 それと、同じフレーズがよく出るファイルを圧縮すると かなり圧縮できるのは、こういう仕組みを使ってるから。 出現率が高いフレーズがあるファイルだと ナイスに圧縮できちゃうのです。 ■編集後記 I・N・G ひなちゃ〜んのマンコに今日も中出ししたぜ!! http://eloli.info/2009/02/post_273.html もう5回目だけど、まだオールクリアできねえ! くそう!精液もう残ってないぞ!! このメルマガは MailuX より発行されています。 登録解除は http://eloli.info/ 関連サイトも http://eloli.info/ 発行者は 中江出汁太郎 連絡は nakae@eloli.info |