【はふまんふごうか】

ハフマン符号化 とは?

💡 よく使う文字は短く、あまり使わない文字は長く、メリハリで圧縮
📌 このページのポイント
ハフマン符号化:頻度に応じた可変長符号 出現頻度 A 45% B 25% C 15% D 10% E 5% ハフマン木 100 0 1 A 55 0 1 B 30 0 1 C 15 D E 符号の割り当て A (45%) → 0 B (25%) → 10 C (15%) → 110 D (10%) → 1110 E (5%) → 1111 よく出る文字ほど短い符号
ハフマン符号化のイメージ
ひよこ ひよこ

ハフマン符号化ってどうやってデータを圧縮するの?

ペンギン先生 ペンギン先生

よく出る文字には短いビット列を、めったに出ない文字には長いビット列を割り当てるんだ。日本語で「は」をいちいち「波乗り」って書かなくていいのと同じで、よく使うものは短く書いた方が全体が短くなるよね。

ひよこ ひよこ

どうやって符号の長さを決めるの?

ペンギン先生 ペンギン先生

ハフマン木という二分木を作るんだ。出現頻度の低い文字から順にペアにして木を組み上げる。するとよく出る文字は木の上の方、めったに出ない文字は下の方に配置されて、自然と最適な符号長になるよ。

ひよこ ひよこ

「01」の後に「011」が来たら、どこで区切るか分からなくならない?

ペンギン先生 ペンギン先生

いい質問だね!ハフマン符号は「接頭符号」という性質を持っていて、ある符号が別の符号の先頭部分になることがないんだ。だから区切り記号がなくても一意にデコードできるよ。

ひよこ ひよこ

実際にはどこで使われてるの?

ペンギン先生 ペンギン先生

ZIP、gzip、JPEG、PNG、MP3、MPEG……ほぼ全ての圧縮フォーマットの中で使われているよ。ちなみにハフマンが大学院生のときに課題として発明したという逸話は有名で、教授が解けなかった問題を学生が解いちゃったんだ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「ハフマン符号化」って出てきたら「よく出る文字を短い符号にして圧縮する方法」と思えればだいたいOK!
📖 おまけ:英語の意味
「Huffman Coding」 = ハフマン符号化
💬 MITの大学院生デビッド・ハフマンが1952年に課題レポートとして発表したアルゴリズムなんだよ
← 用語集にもどる