0

다음과 같은 표준 하프만 코드 테이블이 있다고 가정 해 봅시다.Canonical Huffman Encoder : 인코딩 된 비트 스트림의 내용

Symbol Code-length Codeword 
A   2   00 
B   2   01 
C   2   10 
D   2   11 

이제 입력 파일에서 기호를 읽고 위의 표를보고 인코딩합니다. 그러나 표준 자원 인 허프만 (Huffman)의 경우 코드 워드를 보내지 말아야한다는 주장이 많습니다. 대신 각 기호의 코드 길이로 충분합니다.

텍스트 파일에 ACCDB가 포함되어있는 경우 인코딩 된 비트 스트림으로 00 01 10 11 또는 10 10 10 10 (해당 코드 길이의 이진 값)을 전송해야합니까? 내가 틀렸다면 나에게 바로 설명을 해주십시오.

또한 정규 허프만의 경우 해당 비트 스트림을 디코딩하여 원래 기호 ACCDB (디코더에서 허프만 트리를 사용하지 않음)를 다시 얻으려면 어떻게해야합니까?

+1

질문을 수정 한 후에도 여전히 접두사 코드가 아닙니다. A는 C와 D의 접두사입니다. 접두어 코드에서 접두사로 다른 코드를 사용할 수있는 코드는 없습니다. –

+1

이제 불완전한 코드입니다. 100 및 111은 사용되지 않습니다. 당신은 C와 D의 마지막 비트를 깎아 내서 10과 11을 길이 2 2 2 2로 완전한 코드로 만들 수 있습니다. 유효한 4 개의 기호 코드 길이는 2 2 2 2와 1 2 3 3입니다. –

답변

0

정규화 된 허프만 코드 테이블이 아니며 허프만 코드도 아니며 접두사 코드도 아닙니다. 코드 길이 1, 2, 2, 3은 사용 가능한 비트를 초과 구독합니다. 1, 2, 2는 완전한 코드이므로 더 이상 심볼을 코딩 할 수 없습니다.

1, 2, 3, 3은 완전하고 과도하게 초과 된 코드입니다.이 경우 코드의 예는 0, 10, 110, 111이됩니다. 이러한 코드는 고유하게 디코딩 될 수 있으며, 왼쪽에서 오른쪽으로.

+0

감사합니다. 좋아요. 코드와 사용 가능한 비트가 있습니다. 그러나 다른 스레드에서 이전 설명 중 하나에서 우리는 디코더에 코드 워드를 보내지 않아야합니다. 맞습니까? 그럼, 위의 예제에서 인코딩 된 비트 스트림이 어떻게 보이는지 알려주시겠습니까? 정규 허프만의 경우에는 해당 코드 워드 일 것입니다. 또 다른 질문은 디코더에서 허프만 트리를 사용하지 않아도되는지, 디코더가 코드 단어 (또는 코드 길이) ~ 심볼 정보를 어떻게 유추 할 것인가? 감사. – beginner

+0

두 가지 질문이 추가되어 두 가지 새로운 질문을 게시해야합니다. –

+0

좋습니다. – beginner