적응 형 허프만 코딩은 어떻게 작동합니까?


10

허프만 코딩은 데이터 압축에 사용되는 엔트로피 코딩 의 널리 사용되는 방법입니다 . 신호의 통계에 대한 완전한 지식이 있다고 가정합니다. 그러나 스트리밍 미디어에 사용되는 Huffman 코딩 버전이 있으며 신호 통계에 대한 모든 것을 알 수는 없습니다. 이러한 적응 형 허프만 엔코더 는 어떻게 작동합니까?


1
예제 구현을 포함하여 Wikipedia 기사를 읽었습니까? en.wikipedia.org/wiki/Adaptive_Huffman_coding#Vitter_algorithm 보다 구체적인 질문이 있습니까?
endolith

답변:


7

위키 백과 문서는 주목할만한 구현 중 하나 인 비터 의원 알고리즘을 사용하여 적응 허프만 코딩 과정의 매우 좋은 설명이있다. 언급했듯이 표준 허프만 코더는 입력 시퀀스의 확률 질량 함수에 액세스 할 수 있으며,이 함수는 가장 가능성이 높은 기호 값에 대한 효율적인 인코딩을 구성하는 데 사용됩니다. 예를 들어, 파일 기반 데이터 압축의 프로토 타입 예에서,이 확률 분포는 입력 시퀀스를 히스토그램하여 각 심볼 값의 발생 횟수를 세어 계산할 수 있습니다 (예 : 심볼은 1 바이트 시퀀스 일 수 있음). 이 히스토그램은 다음과 같은 허프만 트리를 생성하는 데 사용됩니다 (Wikipedia 기사에서 가져옴).

허프만 트리 예

트리는 입력 시퀀스에서 가중치 또는 발생 확률을 줄임으로써 배열됩니다. 상단의 리프 노드는 가장 가능성이 높은 심볼을 나타내므로 압축 된 데이터 스트림에서 가장 짧은 표현을받습니다. 그런 다음 트리는 압축 된 데이터와 함께 저장되고 나중에 압축 해제기에 의해 압축되지 않은 입력 시퀀스를 다시 재생성하는 데 사용됩니다. 초기 엔트로피 코드 구현 중 하나로서 표준 허프만 코딩은 매우 간단합니다.


적응 형 허프만 코더의 구조는 매우 유사합니다. 입력 시퀀스의 통계에 대한 유사한 트리 기반 표현을 사용하여 각 입력 심볼 값에 대한 효율적인 인코딩을 선택합니다. 주요 차이점은 알고리즘의 스트리밍 구현으로 입력의 확률 질량 함수에 대한 사전 지식이 없다는 것입니다. 시퀀스 통계는 즉석에서 추정해야합니다. 동일한 허프만 인코딩 체계를 사용하려는 경우 이는 압축 된 스트림에서 각 심볼의 인코딩을 생성하는 데 사용되는 트리가 입력 스트림이 처리 될 때 동적으로 구축 및 유지 관리되어야 함을 의미합니다.

Vitter 알고리즘은이를 달성하는 한 가지 방법입니다. 각 입력 심볼이 처리 될 때 트리가 업데이트되면서 트리 아래로 이동할 때 심볼이 발생할 가능성이 줄어드는 특성이 유지됩니다. 이 알고리즘은 시간이 지남에 따라 트리가 업데이트되는 방식과 결과 압축 데이터가 출력 스트림에서 인코딩되는 방식에 대한 규칙 세트를 정의합니다. 입력 시퀀스가 ​​소비됨에 따라 트리의 구조는 입력 확률 분포에 대한보다 정확한 설명을 나타내야합니다. 표준 허프만 코딩 방식과 달리, 압축 해제 기는 디코딩에 사용할 정적 트리가 없다. 압축 해제 프로세스 동안 동일한 트리 유지 보수 기능을 지속적으로 수행해야합니다.

요약 : 적응 형 허프만 코더는 표준 알고리즘과 매우 유사하게 작동합니다. 그러나 전체 입력 시퀀스 통계 (허프만 트리)의 정적 측정 대신 시퀀스 확률 분포의 동적 누적 (즉, 첫 번째 심볼에서 현재 심볼로) 추정값을 사용하여 각 심볼을 인코딩 (및 디코딩)합니다. . 표준 허프만 코딩 방식과 달리 적응 형 허프만 알고리즘은 인코더와 디코더 모두에서이 통계 분석이 필요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.