허프만 코드 예제

Comments 0 by
August 2, 2019

우리는 정보의 이러한 파일을 나타내는 방법에 대한 많은 옵션이 있습니다. 여기서는 각 문자가 코드워드라고 하는 고유한 이진 문자열로 표시되는 이진 문자 코드를 디자인하는 문제를 고려합니다. 5자 및 주어진 가중치가 있는 코드에 대해 Huffman 코딩의 결과를 예로 들어 보겠습니다. 모든 코드에 대해 L을 최소화한다는 것을 확인하지는 않지만 L을 계산하고 주어진 가중치 집합의 섀넌 엔트로피 H와 비교합니다. 결과는 거의 최적입니다. n-ary Huffman 알고리즘은 {0, 1, … … n − 1} 알파벳을 사용하여 메시지를 인코딩하고 n-ary 트리를 작성합니다. 이 방법은 허프만이 원래 논문에서 고려했습니다. 동일한 알고리즘은 이진 (n 은 2 와 동등한) 코드에 대해 적용되며, n 최소 가능한 기호가 2 개의 가장 가능성이 낮은 기호가 대신 함께 가져온다는 점을 제외하면.

n보다 큰 n의 경우 모든 소스 단어 집합이 Huffman 코딩을 위한 n-ary 트리를 제대로 형성할 수 있는 것은 아닙니다. 이러한 경우 0-확률 장소 홀더를 추가해야 합니다. 이는 트리가 n대 1 계약자를 형성해야 하기 때문입니다. 바이너리 코딩의 경우, 이것은 2 대 1 계약자이며, 모든 크기의 세트는 그러한 계약자를 형성 할 수 있습니다. 소스 단어의 수가 1 modulo n-1에 일치하면 소스 단어 집합이 적절한 허프맨 트리를 형성합니다. 그럼에도 불구하고 접두사 코드는 단순성, 고속 및 특허 적용 범위가 부족하기 때문에 광범위하게 사용됩니다. 그들은 종종 다른 압축 방법에 “백 엔드”로 사용됩니다. DEFLATE (PKZIP의 알고리즘) 및 JPEG 및 MP3와 같은 멀티미디어 코덱에는 프런트 엔드 모델과 양자화가 뒤따르는 접두사 코드의 사용이 뒤따릅니다. 대부분의 응용 프로그램에서 Huffman의 알고리즘을 사용하여 설계된 코드가 아닌 미리 정의된 가변 길이 코드를 사용하더라도 이러한 코드를 “허프맨 코드”라고 합니다.

불평등 문자 비용으로 허프만 코딩은 이 가정없이 일반화됩니다 : 인코딩 알파벳의 문자는 전송 매체의 특성으로 인해 균일하지 않은 길이를 가질 수 있습니다. 예를 들어 모스 코드의 인코딩 알파벳은 `대시`가 `점`보다 보내는 데 시간이 오래 걸리므로 전송 시간에 대시 비용이 더 높습니다. 목표는 여전히 가중 평균 코드워드 길이를 최소화하는 것이지만 메시지에 사용되는 기호 수를 최소화하기에는 더 이상 충분하지 않습니다. 어떤 알고리즘도 기존의 허프만 코딩과 동일한 방식으로 또는 동일한 효율로 이 문제를 해결하는 것으로 알려져 있지 않지만, 골린에 의한 정수 비용의 경우 솔루션이 개선된 Karp에 의해 해결되었습니다. 입력. 알파벳 A = (a 1 , a 2 , n) {displaystyle A=(a_{1}, a_{2}, cdots, a_{n})} 크기의 기호 알파벳인 n {displaystyle n} 입니다. 튜플 W = (w 1 , w 2 , w n) {displaystyle W =(w_{1}, w_{2}, cdots, w_{n})} ( 일반적으로 확률에 비례) 기호 가중치의 튜플입니다. w i = w e i g h t (a i) , 1 ≤ i ≤ n {디스플레이 스타일 w_{i}=mathrm {weight} left(a_{i} 오른쪽),1leq ileq n} . 출력. 코드 C ( W) = ( C 1 , c 2 , 2 , n) {디스플레이 스타일 Cleft (W_{1}, c_{2}, c_{2}, cdots, c_{n}}} ,1leq ileq n} . 목표.

Let L (C (C (W) ) = = 1 = 1 n w i × l e n g t h (c i) {디스플레이 스타일 Lleft (Cleft(Wright)오른쪽)={a=1}{{n{w{a}수학 수학 {{n}{w_{i}시간 수학 {rm {length} 왼쪽(c_{i})}}}의 가중치 길이입니다. 조건: L (C (W) ) = L (T) { 디스플레이 스타일 Lleft (C왼쪽 (W오른쪽)오른쪽)leq Lleft (T왼쪽 (W오른쪽)오른쪽)} 모든 코드 T (W) {디스플레이 스타일 T 왼쪽 (W오른쪽)} 일반적으로 압축 해제 프로세스는 일반적으로 각 비트가 입력 스트림에서 읽을 때 Huffman 트리 노드를 노드별로 통과하여 접두사 코드 스트림을 개별 바이트 값으로 변환하는 것입니다(리프 노드에 반드시 도달). 해당 바이트 값에 대한 검색을 종료합니다).