도구스개발

허프만 부호화 계산기

글이나 빈도 목록에서 허프만 트리를 만들어 글자별 부호와 평균 부호길이, 압축률을 냅니다. 엔트로피와 나란히 놓아 이론 한계에 얼마나 가까운지 보여 주고, 구분자 없이 되돌려 접두부호임을 확인시켜 줍니다.

글자별 빈도를 세어 부호를 만듭니다

기호 5가지 · 전체 11개

평균 2.09비트

엔트로피 2.04비트보다 0.05비트 깁니다

이론 한계와 견주기

엔트로피 H2.04비트넘을 수 없는 바닥
평균 부호길이 L2.09비트
H ≤ L < H+1만족
고정길이와 견주면23 / 33비트69.7%

부호표

기호빈도부호비트
a45.5%501
b18.2%21103
r18.2%21113
c9.1%11003
d9.1%11013

부호로 바꾼 결과

01101110100010101101110

구분자가 하나도 없습니다. 그런데도 «abracadabra» 로 정확히 되돌아옵니다 — 어떤 부호도 다른 부호의 앞부분이 아니라(접두부호) 왼쪽부터 읽어 내려가면 끊을 자리가 저절로 정해지기 때문입니다.

합치는 과정

#가장 작은 둘합친 빈도남은 마디
1c(1)+d(1)24
2b(2)+r(2)43
3cd(2)+br(4)62
4a(5)+cdb…(6)111
빈도가 같은 마디가 있었습니다. 어느 것을 먼저 합치느냐는 정해져 있지 않아 같은 입력에도 부호표가 여러 벌 나올 수 있습니다. 교재의 부호와 달라도 틀린 것이 아닙니다 — 평균 부호길이는 언제나 같습니다. 이 도구는 결과가 재현되도록 «빈도가 같으면 먼저 만들어진 마디 먼저»로 정해 두었습니다.
평균 부호길이는 엔트로피보다 짧아질 수 없고(섀넌의 소스 부호화 정리), 허프만은 그보다 1비트 넘게 길어지지도 않습니다. 위쪽 1비트의 여유는 부호길이가 정수여야 해서생깁니다. 확률이 ½·¼·⅛처럼 2의 거듭제곱이면 낭비 없이 딱 엔트로피와 같아집니다.

사용 방법

  1. 1글을 넣거나 «기호:빈도» 목록을 넣습니다.
  2. 2부호표에서 자주 나오는 글자가 짧은 부호를 받았는지 확인합니다.
  3. 3평균 부호길이를 엔트로피와 견주어 봅니다. 둘의 차이가 곧 낭비되는 비트입니다.

자주 묻는 질문

빈도가 가장 작은 두 마디를 계속 합쳐 올라갑니다. 글자마다 빈도를 적은 잎을 만들고, 가장 작은 둘을 골라 합치기를 마디가 하나 남을 때까지 되풀이한 뒤, 뿌리에서 잎까지 내려가며 왼쪽은 0, 오른쪽은 1을 붙이면 그것이 부호입니다. 자주 나오는 글자일수록 나중에 합쳐져 뿌리에 가까워지므로 짧은 부호를 받습니다.

틀린 것이 아닙니다. 빈도가 같은 마디가 둘 이상일 때 어느 것을 먼저 합칠지는 정해져 있지 않아 같은 입력에도 부호표가 여러 벌 나옵니다. 다만 어느 것을 고르든 평균 부호길이는 언제나 같으며, 그것이 허프만이 최적이라는 뜻입니다. 이 도구는 결과가 재현되도록 «빈도가 같으면 먼저 만들어진 마디 먼저»로 정해 두었습니다.

어떤 부호도 다른 부호의 앞부분이 되지 않기 때문입니다. 이를 접두부호라 하며, 글자를 트리의 잎에만 두면 저절로 그렇게 됩니다. 그래서 0과 1을 왼쪽부터 읽어 내려가다 잎에 닿는 순간이 곧 한 글자가 끝난 자리입니다. 구분자를 따로 넣을 필요가 없습니다.

없습니다. 섀넌의 소스 부호화 정리에 따라 기호 하나를 평균 H비트보다 적게 담는 무손실 부호는 존재하지 않습니다. 허프만은 H ≤ L < H+1을 보장하는데, 위쪽 1비트의 여유는 부호 길이가 정수여야 해서 생깁니다. 확률이 ½·¼·⅛처럼 2의 거듭제곱이면 낭비 없이 딱 H와 같아집니다.

씁니다. 다만 대개 다른 방식과 함께 씁니다. ZIP과 gzip의 Deflate는 반복되는 부분을 먼저 줄인 뒤 그 결과에 허프만을 적용하고, JPEG과 MP3도 마지막 단계에서 허프만을 씁니다. 허프만 혼자서는 글자 하나하나를 따로 보므로, 앞뒤가 이어지는 실제 자료에서는 다른 방식과 겹쳐 쓰는 편이 훨씬 잘 줄어듭니다.

전송되지 않습니다. 계산은 전부 브라우저 안에서 이뤄지고, 입력값은 이 브라우저의 localStorage에만 남습니다.

알아두면 좋은 점

  • 압축률은 부호화된 비트만 셉니다. 실제로는 부호표(또는 부호길이 목록)도 함께 보내야 하므로 짧은 글에서는 이 값보다 덜 줄어듭니다.
  • 기호가 한 가지뿐이면 합칠 상대가 없습니다. 0비트 부호는 쓸 수 없어 관례대로 1비트를 주며, 이때만 H ≤ L < H+1의 범위 밖에 놓입니다.
  • 엔트로피는 dev/entropy와 같은 함수로 계산합니다. 글자 하나하나가 서로 독립이라고 볼 때의 하한이라, 실제 압축기는 앞뒤 관계를 이용해 이보다 더 줄이기도 합니다.
  • 기호는 300가지까지만 다룹니다.

함께 보면 좋은 도구

마지막 검증: 2026년 9월 1일 · 결과는 참고용 추정치입니다.