算術符号:区間を刻んで1点に

文字列を [0,1) の区間に閉じ込め、記号ごとに区間を入れ子で狭めて、最後に残った区間内の1つの小数で全体を表します。

入力文字列(記号 A・B・C のみ。最大8文字)

例:BACA / AAB / CAB。A・B・C 以外の文字は自動で除かれます。

記号の確率(合計が 1 になるよう自動正規化)
A 0.50
B 0.33
C 0.17
アニメ表示する記号数(区間ズームの深さ)
4 / 4
現在の区間 [low, high)
区間の幅 = 出現確率
代表する小数(符号)
理論ビット数 −log₂(幅)
この1文字での区間分割
区間ズーム(上から下へ入れ子で拡大)
算術符号では、文字列全体を 1つの数 で表します。最初は [0, 1) という区間から始め、 記号を1文字読むたびに、その記号の確率に応じて区間を入れ子に狭めていきます。
たとえば確率 A=0.5, B=0.3, C=0.2 なら、区間を A:[0,0.5) / B:[0.5,0.8) / C:[0.8,1) に分け、 最初の文字が B なら次は [0.5,0.8) の中を同じ比で再分割……と繰り返します。
最後に残った狭い区間の中のどれか1つの小数を選べば、それが文字列全体の符号です。 区間の幅 = その文字列の出現確率であり、確率が低い(珍しい)文字列ほど区間が狭く、必要なビット数が増えます。

いま何が起きている?

ここがポイント