今日はプログラムの話!ハフマン符号化について!
こんばんは、ダンです。
今日ふと目にした応用情報の本。
開くとハフマン符号化について説明してたんです。
確率的圧縮の何とかだよなー。あれ、あれってどうやって実装されてるんだろ?
疑問に思ったら確かめるのがプログラマーですよねっ★
ってわけで書いてみましたっ
プログラムの話題なので、興味ない人はスルーすいしょう。
さぁ、Lets!C言語でハフマン符号!間違ってたらごめんなさい!
まずハフマン符号化で知ってる本で得た知識。
ABCD4つのアルファベットがあり、それぞれ
A=50%
B=30%
C=10%
D=10%
の出現率の時
Aを0、Bを01、Cを001、Dを000で表すことで
確率が少ない物を少ないビット数で表すことによりデータ量を小さくする事ができる。
まぁ、これが僕の知ってるハフマンさんの知識でした。
これだけで情報処理技術者試験は全然問題ないんですけど、ここまで知ったら書きたくなるよね。
ってわけで自分なりに書いてみました。
最初に思いついたのが
a,b,c....,zそれぞれに1つのハフマン符号を割り当てて、圧縮すると言う方法。
でもこれじゃあアルファベット小文字以外使えないしダメだろー。
まぁいいやとりあえず書いてみよう。って事で書きました。
main.txt
まぁ、見てわかる通り途中です。
気づきました。
あー。バイナリでやればいいじゃん(´・ω・`)
って!
そしたらアルファベットとか関係なしにどんな物にでも使えるようになるし・・・。なんで先にこっち浮かばなかった、僕。
えーっと。
00,01,10,11にわけて
出現確率が
00=50%
01=30%
10=10%
11=10%
だとしたら
00を0、10を01、10を110、11を111 にすればいいのかな?
んー、でも1バイトでまとめた方が書きやすいよなー。
2^8だから、256通りかー。
もう、考えるの面倒だからかいちゃえ、←
ってわけで256通りにわけるやり方で書いてみたのがこちらっ
・・・できなかったっ★てへっ★
んー。頑張って組んでたんですけど、途中でやりかたミスったなー。って。
もう今日疲れたから明日やります(´・ω・`)
今日ふと目にした応用情報の本。
開くとハフマン符号化について説明してたんです。
確率的圧縮の何とかだよなー。あれ、あれってどうやって実装されてるんだろ?
疑問に思ったら確かめるのがプログラマーですよねっ★
ってわけで書いてみましたっ
プログラムの話題なので、興味ない人はスルーすいしょう。
さぁ、Lets!C言語でハフマン符号!間違ってたらごめんなさい!
まずハフマン符号化で知ってる本で得た知識。
ABCD4つのアルファベットがあり、それぞれ
A=50%
B=30%
C=10%
D=10%
の出現率の時
Aを0、Bを01、Cを001、Dを000で表すことで
確率が少ない物を少ないビット数で表すことによりデータ量を小さくする事ができる。
まぁ、これが僕の知ってるハフマンさんの知識でした。
これだけで情報処理技術者試験は全然問題ないんですけど、ここまで知ったら書きたくなるよね。
ってわけで自分なりに書いてみました。
最初に思いついたのが
a,b,c....,zそれぞれに1つのハフマン符号を割り当てて、圧縮すると言う方法。
でもこれじゃあアルファベット小文字以外使えないしダメだろー。
まぁいいやとりあえず書いてみよう。って事で書きました。
main.txt
まぁ、見てわかる通り途中です。
気づきました。
あー。バイナリでやればいいじゃん(´・ω・`)
って!
そしたらアルファベットとか関係なしにどんな物にでも使えるようになるし・・・。なんで先にこっち浮かばなかった、僕。
えーっと。
00,01,10,11にわけて
出現確率が
00=50%
01=30%
10=10%
11=10%
だとしたら
00を0、10を01、10を110、11を111 にすればいいのかな?
んー、でも1バイトでまとめた方が書きやすいよなー。
2^8だから、256通りかー。
もう、考えるの面倒だからかいちゃえ、←
ってわけで256通りにわけるやり方で書いてみたのがこちらっ
・・・できなかったっ★てへっ★
んー。頑張って組んでたんですけど、途中でやりかたミスったなー。って。
もう今日疲れたから明日やります(´・ω・`)