【2分岐】
・Perumallaの方法
- 元プログラム if (e) s1 else s2
- 前提条件:eは副作用を含んでいない
- 順実行 if (e) {s1 b=1;} else {s2 b=0;}
- 逆実行 if (b) rs1 else rs2
- 実行されるたびに順実行のときのゴミ1bitがbに格納される
・Perumallaの方法の短所
- 元プログラム if (e1) s1 else if (e2) s2 else s3
- 前提条件:e1,e2は副作用を含んでいない
- 順実行 if (e1) {s1 b1=1;} else {if (e2) {s2 b2=1;} else {s3 b2=0;} b1=0;}
o それぞれの選択文を単独でみたとき,その制御流を復元するために十分な情報をb1, b2に格納している.
- 逆実行 if (b1) rs1 else if (b2) rs2 else rs3
o b1とb2に格納されたデータを用いて順実行の制御流を復元している.
- 実行されるたびに,
s1が実行されるとゴミ1bitがb1に格納される
s2かs3が実行されるとゴミ2ビットがb1, b2に格納される
o s1, s2, s3 がそれぞれ実行される確率の分布が与えられると平均ゴミ量が削減可能
- s1, s3: 1/4, s2: 1/2の確率 のとき,
平均ゴミ量は 1 x 1/4 + 2 x 1/2 + 1 x 1/4 = 2.5 bit
平均ゴミ量はs1,s2,s3のどの文が実行されたかの平均情報量まで削減可能なはず→最適では無い.一般にPerumallaの方法では最適にならない.
- 小数以下の情報量を集めて表現することができない.
o if (e1) s11 else s12 // √2/2 : (2-√2)/2 で分岐
if (e2) s21 else s22 // √2/2 : (2-√2)/2 で分岐
* s11 s21 --> 確率1/2,よって情報量1(=-log2 1/2)なので+1bitで表現可 (s11 s22 or s12 s21 --> 確率 (√2-1)/2, s21 s22 --> 確率 (3-√2)/2)
* Perumallaの方法では,s11 s21が実行されたことを +1ビット で表現できない
【TODO】
以下をOverleafにアップロードする
- 以上の文章をまとめる
- 「情報理論 / 今井秀樹著」の序論,算術符号,情報量の定義を読んで文章にまとめる
以上