「葵先輩、これ見てください」
由紀は自分のノートを開いた。そこには、同じ文章を何通りもの方法で書き写してあった。
「全部同じ内容だけど、書き方を変えてみたんです。一番短くできるのはどれですか?」
葵が興味深そうに覗き込んだ。「これは符号化の話だね。情報を表現する方法はたくさんあるけど、効率的な符号化を見つけるのが情報理論の仕事だ」
「効率的って?」
「少ないビット数で、同じ情報を伝えること」
陸が横から口を挟んだ。「俺、メッセージ短くするの得意だよ。『了解』を『り』だけで送る」
「それは略しすぎで伝わらない可能性があるけどね」葵が苦笑した。「でも、考え方は正しい。頻繁に使う単語を短く符号化すれば、全体の長さを減らせる」
「頻繁に使う…?」由紀が考え込んだ。
葵はホワイトボードに文字列を書いた。
「例えば、『AAABBC』という文字列がある。Aが3回、Bが2回、Cが1回。普通に符号化すると、A=00、B=01、C=10として、全部で12ビット必要」
「でも、もっと短くできる?」
「そう。ハフマン符号化という方法がある。頻度の高い文字に短い符号を割り当てる」
葵は木構造の図を描き始めた。
「A=0、B=10、C=11とすれば、どうなる?」
由紀が計算した。「AAA=000、BB=1010、C=11…合計で9ビット!」
「正解。これが符号化の最適化だ」
陸が不思議そうに聞く。「でも、Aが『0』だけって、どうやって次の文字と区別するの?」
「鋭い質問。これが瞬時符号化可能性の条件だ。符号が他の符号の先頭部分にならないように設計する」
葵は図を指差した。「この木構造を使えば、どの符号も他の符号の接頭辞にならない。だから一意に復号できる」
「木構造?」由紀が首をかしげた。
「ハフマン木と呼ばれる。まず、頻度の低い文字を二つ組み合わせて、新しいノードを作る。これを繰り返して木を構築する」
陸が手を動かして試してみた。「C(頻度1)とB(頻度2)を合体…次にABCの塊(頻度3)とA(頻度3)を…」
「そう。最終的に、頻度に応じた最適な符号が得られる」
由紀が考え込んだ。「じゃあ、完全にランダムな文字列だったら?」
「良い質問。全ての文字が等確率で出現するなら、符号化しても短くならない」
「エントロピーが高いから」陸が言った。
葵が驚いた表情を見せた。「成長したね、陸。そう、エントロピーが圧縮の限界を決める。これがシャノンの源符号化定理だ」
「つまり、パターンがあるほど圧縮できるってこと?」由紀がまとめた。
「正確。冗長性が高いほど、効率的な符号化が可能になる」
陸がスマートフォンを取り出した。「zipファイルって、これを使ってるの?」
「基本的な原理は同じ。実際には、もっと複雑なアルゴリズムを使うけどね。LZ77とか、算術符号化とか」
「難しそう」由紀が言った。
「でも、根底にあるのは同じ考え方。頻繁に現れるパターンを短く表現する」
陸がふと思いついた。「じゃあ、俺の『り』作戦も、文脈がしっかりしてれば有効ってこと?」
「理論的にはね。ただし、受信側が文脈を共有してることが前提」
由紀が笑った。「情報理論って、実用的なんですね」
「コンピュータのあらゆるところで使われてる。画像、動画、音声の圧縮。全部、符号化理論の応用だ」
葵が静かに言った。「情報は、表現の仕方で軽くなる。でも、内容は変わらない。それが符号化の美しさだよ」
三人は、目に見えない情報の重さと軽さについて、しばらく考え込んだ。