2017/08/20 00:04

データ表現、データ圧縮2」で、大切なことを書き忘れていました。そちらにも、「データ表現、データ圧縮1」にもこういうものがありました:

値  回数  ビット列
00 2   1111110
01 1   11111110
80 1   111111110
02 5   0
40 5   10
04 5   110
20 5   1110
08 3   11110
10 3   111110
1F 1   1111111110
F8 1   11111111110

これを、回数、つまり頻度順に並べてみます:
値  回数  ビット列
02 5   0
40 5   10
04 5   110
20 5   1110
08 3   11110
10 3   111110
00 2   1111110
01 1   11111110
80 1   111111110
1F 1   1111111110
F8 1   11111111110

この場合、元の8bitに対してのこれらの符号の平均長がどうなるのかを見てみましょう。計算は簡単で、「ビット列の長さ * 回数/32バイト」の総和となります:
((1*(5/32)) + (2*(5/32)) + (3*(5/32)) + (4*(5/32)))
+ ((5*(3/32)) + (6*(3//32)))
+ (7*(2/32))
+ ((8*(1/32)) + (9*(1/32)) + (10*(1/32)) + (11*(1/32)))
= ((1*0.15625) + (2*0.15625) + (3*0.15625) + (4*0.15625))
 + ((5*0.09375) + (6*0.09375))
 + (7*0.06250)
 + ((8*0.03125) + (9*0.03125) + (10*0.03125) + (11*0.03125))
= (0.15625 + 0.3125 + 0.46875 + 0.625)
 + (0.46875 + 0.5625)
 + (0.4375)
 + (0.25 + 0.28125 + 0.3125 + 0.34375)
= (1.5625)
 + (1.03125)
 + (0.4375)
 + (1.1875)
= 4.21875

このように、平均して元の8bit4.21875bitになっています。元が32バイトですから、4.21875に32をかけると135bit、これを8で割ると16.875バイトとなります。「データ表現、データ圧縮2」では17バイトになっていましたので、いい感じです。

先の、出現回数1回のものはこれらでした:
01 1   11111110
80 1   111111110
1F 1   1111111110
F8 1   11111111110

これらは、いずれも8bit以上の長さになっています。そういうものがあっても、出現頻度が少ないなら、かまわないわけです。データ圧縮ができるということは、こんな感じによってです。

絵などをラン・レングスで表わしてみる、あるいはラン・レングスから絵を復元してみるというあたりが、本企画で扱う題材としては適当なものなのかもしれません。ですが、このあたりに関連して、「情報とはなにか」であるとか、「情報量」についての課題も組み込みたいところではあります。リボルバー拳銃でのロシアン・ルーレット (よく使われる例です)、あるいはそれと同じモデルで、条件付き確率として扱えないことはないかもしれません。ただし、あくまで条件付き確率であることを強調しておかないと、後で児童・生徒が混乱することになるかもしれません。そのあたりも含めて、検討が必要だと考えています。

興味を持たれましたら、ぜひご支援や、コメントをお願いいたします。

プロジェクトの本文や、活動報告についての感想、ご意見、ご質問を、ぜひコメントでお寄せいただければと思います。現在は支援募集期間中であり、本企画の実施期間ではないため、お寄せいただいた感想などについてはリターンとしてではなく、お返事や回答をさせていただきます。

また、私個人についてはこちらをご覧ください。