0comments

허프만 코드 예제

Huffman 코딩은 각 기호에 대한 표현을 선택하기 위한 특정 메서드를 사용하여 접두사 코드(“접두사 없는 코드”라고도 함, 즉 특정 기호를 나타내는 비트 문자열은 비트 문자열의 접두사가 아닙니다. 다른 기호)를 참조하십시오. 허프만 코딩은 “허프만 코드”라는 용어가 허프만의 알고리즘에 의해 생성되지 않은 경우에도 “접두사 코드”의 동의어로 널리 사용되는 접두사 코드를 만드는 광범위한 방법입니다. Huffman의 원래 알고리즘은 알려진 입력 확률 분포를 가진 심볼별 코딩, 즉 이러한 데이터 스트림에서 관련없는 기호를 별도로 인코딩하는 데 최적입니다. 그러나 기호별 제한이 삭제되거나 확률 질량 함수를 알 수 없는 경우 는 최적이 아닙니다. 또한 기호가 독립적이지 않고 동일하게 분산되지 않으면 단일 코드가 최적성에 충분하지 않을 수 있습니다. 산술 코딩과 같은 다른 방법은 종종 더 나은 압축 기능을 가지고 있습니다. 압축 해제 프로세스는 일반적으로 각 비트가 입력 스트림에서 읽을 때 허프만 트리 노드를 노드별로 트래버스하여 접두사 코드 스트림을 개별 바이트 값으로 변환하는 것입니다. 리프 노드에 도달하면 특정 바이트 값에 대한 검색이 종료됩니다.

리프 값은 원하는 문자를 나타냅니다. 일반적으로 허프만 트리는 각 압축 주기에서 통계적으로 조정된 데이터를 사용하여 구성되므로 재구성은 매우 간단합니다. 그렇지 않으면 트리를 재구성하는 정보를 별도로 보내야 합니다. 의사 코드: 허프만 코딩을 사용하는 동안 이 특정비효율성을 없애기 위한 두 가지 관련 방법이 있습니다. 고정된 수의 심볼(“차단”)을 결합하면 압축이 증가하는 경우가 많습니다. 블록의 크기가 무한대에 가까워지면 허프만코딩은 이론적으로 엔트로피 한계, 즉 최적의 압축에 접근합니다. 그러나 허프맨 코드의 복잡성은 인코딩할 수 있는 가능성의 수에 선형이기 때문에 임의로 큰 기호 그룹을 차단하는 것은 실용적이지 않습니다. 이렇게 하면 실제로 수행되는 차단 의 양이 제한됩니다. 유형 4.

Huffman 인코딩을 사용하여 저장된 비트 수 – 앞서 언급한 두 방법 모두 보다 효율적인 코딩을 위해 임의의 수의 기호를 결합하고 일반적으로 실제 입력 통계에 적응할 수 있지만 산술 코딩은 크게 증가하지 않고 그렇게 합니다. 계산 또는 알고리즘 복잡성 (가장 간단한 버전은 허프만 코딩보다 느리고 복잡하지만). 이러한 유연성은 입력 확률이 정확하게 알려지지 않았거나 스트림 내에서 크게 달라질 때 특히 유용합니다. 그러나 허프만 코딩은 일반적으로 더 빠르며 산술 코딩은 역사적으로 특허 문제에 대한 몇 가지 우려의 대상이었습니다. 따라서 많은 기술은 역사적으로 허프만 및 기타 접두사 코딩 기술에 찬성산술 코딩을 피했습니다. 2010년 중반 현재, 허프만 코딩에 대한 이 대안에 가장 일반적으로 사용되는 기술은 초기 특허가 만료됨에 따라 공개 도메인으로 전달되었습니다. 허프만 트리 입력을 빌드하는 단계는 발생 빈도와 함께 고유 문자의 배열이며 출력은 허프만 트리입니다. 실용적인 대안은 광범위하게 사용되는 런길이 인코딩입니다. 이 기술은 엔트로피 코딩에 앞서 한 단계를 추가하며, 특히 반복된 기호의 실행(runs)을 계산한 다음 인코딩합니다. Bernoulli 프로세스의 간단한 경우, Golomb 코딩은 허프만 코딩의 기술을 통해 입증 된 사실, 코딩 실행 길이에 대한 접두사 코드 중 최적입니다. [4] 수정된 허프만 코딩을 사용하는 팩스 기계에서도 이와 유사한 접근 방식을 취합니다.

그러나 실행 길이 코딩은 다른 압축 기술만큼 많은 입력 유형에 적응할 수 없습니다. 솔루션: Huffman을 사용하지 않고 비트 수를 찾음, 총 문자 수 = 주파수 합계 = 1문자 = 1바이트 = 1바이트 = 8비트 총 비트 수 = 8*100 = 1951년 David A.

Comments are closed.