허프만 부호(Huffman Code)란?
기호가 나오는 확률을 바탕으로, 평균 부호 길이가 최소가 되는 접두 부호를 만드는 방법. 확률이 가장 작은 두 기호(또는 노드)를 묶어 하나로 만드는 조작을 반복하여 트리를 만들고, 각 분기에 0과 1을 할당하여 부호어로 한다. 자주 나오는 기호일수록 짧은 부호어가 된다. 1기호씩 부호화하는 접두 부호 중에서는 최적이며, 평균 부호 길이는 엔트로피 이상, 엔트로피 + 1비트 미만이 된다. ZIP이나 gzip의 Deflate, JPEG 등에서 다른 방식과 조합하여 쓰인다. 1952년에 허프만이 발표했다.
일본어 명칭: ハフマン符号
허프만 부호(Huffman Code)은(는) 정보 이론과 부호의 기초 등 1개 분야의 연습 문제 5개에 나와요.
분야: 정보 이론과 부호의 기초
만드는 법
예를 들어 확률 1/2, 1/4, 1/8, 1/8인 기호에서는 먼저 1/8끼리 묶어 1/4, 다음으로 그것과 1/4을 묶어 1/2, 마지막으로 나머지 1/2과 묶습니다. 루트에서 각 기호까지의 분기에 0과 1을 붙이면 부호어는 0, 10, 110, 111이 되고, 평균 부호 길이는 1.75비트로 엔트로피와 같아집니다. 확률이 모두 2의 거듭제곱분의 1일 때는 이처럼 평균 부호 길이가 엔트로피와 일치합니다.
부호어는 하나로 정해지지 않는다
0과 1을 붙이는 방법이나, 같은 확률 중 어느 쪽을 먼저 묶느냐에 따라 부호어는 바뀝니다. 예를 들어 확률 0.4, 0.2, 0.2, 0.1, 0.1에서는 부호 길이가 1, 2, 3, 4, 4도, 1, 3, 3, 3, 3도, 2, 2, 2, 3, 3도 될 수 있지만, 평균 부호 길이는 모두 2.2비트입니다. 그래서 시험 등에서는 부호어 자체보다 평균 부호 길이를 묻는 경우가 많습니다.