%3C/text%3E%3C/svg%3E">
💻
💻 IT·개발

허프만 코드 생성기

입력하면 바로 계산됩니다.

입력값

허프만 부호 생성기 쉽게 이해하기 — 개념과 원리

허프만 부호화는 자주 나오는 문자에는 짧은 비트열을, 드물게 나오는 문자에는 긴 비트열을 붙여 주어진 빈도에서 가장 짧은 접두 부호를 만드는 방법입니다. 이 도구는 입력한 글로 부호 트리를 만들고, 문자별 부호와 전체 부호 길이를 보여 줍니다. 허프만 부호는 ZIP·PNG·gzip이 쓰는 DEFLATE와 JPEG의 기본 방식에도 들어 있습니다.

허프만 부호 트리가장 드문 기호부터 합치면 a는 0, b·r·c·d는 3비트 부호를 얻어 abracadabra는 88비트 대신 5 + 18 = 23비트면 됩니다."abracadabra"의 허프만 트리0101010111624a×5c×1d×1b×2r×2a0b110r111c100d10188비트(11 × 8) 대신 23비트 (26.14%)
꼭대기에서 잎까지 0/1을 읽으면 부호가 되고, 가장 많은 a가 가장 짧은 부호를 받습니다.

계산 방법

  1. 각 문자가 나온 횟수를 셉니다.
  2. 모든 문자를 횟수를 가중치로 한 잎(leaf) 노드로 둡니다.
  3. 가장 가벼운 두 노드를 꺼내 가중치의 합을 갖는 새 노드로 묶고, 트리가 하나 남을 때까지 반복합니다.
  4. 뿌리에서 내려가며 왼쪽은 0, 오른쪽은 1을 붙여 부호를 읽습니다.

부호표 자체의 크기는 포함하지 않습니다.

원리

어떤 부호도 다른 부호의 앞부분이 되지 않으므로, 구분 기호 없이도 비트열을 앞에서부터 차례로 해독할 수 있습니다. 가장 드문 두 노드부터 묶으면 드문 문자가 트리 깊은 곳에 놓이고, 긴 부호는 거의 쓰이지 않으니 손해가 적습니다. 1952년 허프만은 이 탐욕적 선택이 최적의 접두 부호를 만든다는 것을 증명했습니다. 평균 부호 길이는 섀넌 엔트로피와 1비트 이내로 차이 납니다.

예제 풀이

  1. 입력: "abracadabra"(11글자), 횟수는 a = 5, b = 2, r = 2, c = 1, d = 1
  2. 병합: c(1)+d(1) = 2 → b(2)+r(2) = 4 → cd(2)+br(4) = 6 → a(5)+6 = 11
  3. 부호: a = 0, c = 100, d = 101, b = 110, r = 111
  4. 비트 수: 5×1 + 1×3 + 1×3 + 2×3 + 2×3 = 23비트
  5. ASCII는 11 × 8 = 88비트이므로 크기는 23 ÷ 88 = 26.14%, 절약률은 73.86%

결과 해석

비율이 낮을수록 압축이 잘 된 것입니다. 이 예에서 문자당 평균은 23 ÷ 11 ≈ 2.09비트로, 엔트로피 약 2.04비트에 매우 가깝습니다. 가중치가 같은 노드를 어떤 순서로 묶느냐에 따라 부호 모양은 다를 수 있지만, 최적 부호의 전체 길이는 같습니다.

흔한 실수

주의: 허프만 부호는 문자 하나하나의 빈도만 활용합니다. 실제 압축 프로그램은 LZ77 같은 사전 방식과 함께 사용하며, 문자가 한 종류뿐이면 이 도구는 부호 "0"을 붙입니다.

자주 묻는 질문

허프만 부호화는 무손실인가요?

네. 같은 트리로 해독하면 원래 글이 그대로 복원됩니다.

산술 부호화와는 무엇이 다른가요?

허프만은 기호마다 정수 개의 비트를 쓰지만, 산술 부호화는 소수 비트까지 활용해 엔트로피에 더 가까워집니다.

왜 접두 부호가 되나요?

문자가 모두 트리의 잎에만 있어서, 한 문자로 가는 경로가 다른 문자를 지나지 않기 때문입니다.

출처: D. A. Huffman, "A Method for the Construction of Minimum-Redundancy Codes", Proceedings of the IRE, 1952 · RFC 1951, DEFLATE Compressed Data Format Specification version 1.3

2026년 11월 8일 확인. 표준 공식과 RFC/IEEE 정의를 사용해 브라우저 안에서만 계산합니다. 입력한 내용은 어디에도 전송되지 않습니다.

💻 IT·개발 계산기 전체 →🏠 홍라이프 계산기 홈 →