에듀테크 프로젝트 대시보드
허프만 코딩
보통 컴퓨터는 모든 글자를 똑같이 8비트로 저장한다. 하지만 글에서 e는 z보다
훨씬 자주 나온다. 허프만 코딩은 자주 나오는 글자에 짧은 비트열, 드물게 나오는 글자에 긴 비트열을
배정해 전체 크기를 줄인다. ZIP · PNG · JPEG · MP3 안에서 실제로 쓰이는 무손실 압축의 핵심 아이디어다.
왼쪽 가지 = 0, 오른쪽 가지 = 1. 뿌리에서 잎(글자)까지 내려가며 만나는 숫자를 이으면 그 글자의 코드가 된다.
인코딩된 비트열:
모든 글자가 트리의 잎에만 있으므로, 어떤 코드도 다른 코드의 앞부분이 될 수 없다.
덕분에 0110100 같은 비트열을 구분 기호 없이 왼쪽부터 읽어 내려가며 딱 하나로 해독할 수 있다.
매 단계 "가장 빈도 낮은 둘"을 합치면, 드문 글자가 트리 깊은 곳(긴 코드)으로 밀려난다. 이 단순한 규칙이 놀랍게도 전체 비트 수를 최소로 만든다는 것이 수학적으로 증명돼 있다.
특정 글자 몇 개가 압도적으로 자주 나오면 절약률이 커진다. 반대로 모든 글자가 똑같은 빈도면 허프만 코드도 고정 길이와 같아져 이득이 없다 (엔트로피 한계).
ZIP/gzip(DEFLATE), PNG, JPEG의 마지막 단계, MP3,
폰트 파일 등. 보통 사전 기반 압축(LZ77) 뒤에 허프만을 한 번 더 씌워 마무리한다.
1952년 David A. Huffman이 MIT 대학원 수업 과제로 고안 — 담당 교수는 Robert Fano였다.