「今日のお題、『符号化』」
葵がホワイトボードに書いた。
「符号化...?」由紀が首をひねる。
「食べ物じゃないよ」陸が笑った。「でも、美味しそうな響きだよな」
「ある意味では、情報を圧縮する技術は『美味しい』かもね」葵が微笑んだ。
「圧縮?」
「情報を、より少ないビットで表現すること。zipファイルとか、mp3とか」
由紀が理解した。「ああ、ファイルサイズを小さくするやつ」
「そう。でも、どうやって圧縮できるのか、考えたことある?」
陸と由紀が首を振る。
葵がノートを開いた。「簡単な例から始めよう。メッセージ『AAABBC』を送りたい」
「6文字だから、6バイト?」陸が言う。
「普通に送ればね。でも、『A3回、B2回、C1回』と送れば?」
「短くなる!」由紀が気づいた。
「これがランレングス符号化。連続した同じ文字をカウントで表す」
葵は別の例を書いた。
「もっと賢い方法もある。よく出る文字に短い符号を、めったに出ない文字に長い符号を割り当てる」
「頻度で決めるってこと?」由紀が聞く。
「そう。これがハフマン符号化。最適な符号長の割り当て方だ」
葵は具体例を示した。
「英文では、Eが最も頻繁に出る。だから、Eに短い符号、例えば『01』を割り当てる。Zはめったに出ないから、長い符号『10111001』とか」
陸が考えた。「でも、どうやって区切りを判断するの?『0101』はEE?それとも別の文字?」
「良い質問!」葵が興奮した。「それが前置符号という概念。どの符号も、他の符号の先頭になってはいけない」
「プレフィックス・フリー」由紀がノートに書く。
「そう。例えば、Aが『0』、Bが『10』、Cが『11』なら、『010011』は明確にA-B-A-A-C-Cと読める」
陸が試してみる。「0, 10, 0, 0... あ、本当だ。混乱しない」
「これがハフマン符号の賢さ。一意に復号可能で、かつ平均符号長が最短」
由紀が質問した。「でも、圧縮できないデータもあるんですよね?」
「鋭い。完全にランダムなデータは、パターンがないから圧縮できない」
葵が補足した。「実は、シャノンのエントロピーが、圧縮の限界を決める」
「H(X)ビット/シンボル以下には圧縮できない」
陸が不思議そうに聞く。「じゃあ、既に圧縮されたファイルをまた圧縮したら?」
「ほとんど小さくならない。もしかしたら、逆に大きくなることもある」
「大きくなる?」由紀が驚く。
「圧縮アルゴリズム自体が、ヘッダーや構造の情報を付加するから。ランダムに近いデータに圧縮をかけると、オーバーヘッドの分だけ増える」
陸が笑った。「符号化って、奥深いな」
「情報理論の実用的な応用だよ」葵が言った。「通信でも、ストレージでも、符号化は至る所で使われてる」
由紀がスマホを見た。「このメッセージも、送信されるときは圧縮されてるんですか?」
「多くの場合、ね。特に画像や動画は、大幅に圧縮されてる」
「JPEGとか?」陸が聞く。
「そう。JPEGは、人間の視覚が感じにくい部分を削る、非可逆圧縮」
「非可逆?」
「元に完全には戻せない圧縮。でも、見た目はほとんど変わらない」
由紀が感心した。「情報の重要度で、圧縮率を変えるんですね」
「まさに。どの情報が大事か、判断するのも符号化の技術だ」
陸がお腹を鳴らした。「符号化の話してたら、お腹空いてきた」
「結局、美味しそうに聞こえてたのか」葵が笑った。
「情報も、圧縮すると味が濃くなる気がする」由紀が冗談を言った。
「良い比喩だね」葵が認めた。「エッセンスを抽出する、という意味では似てるかも」
窓の外で、夕日が沈む。効率的に伝えること。それが符号化の本質だ。