0

클래스 할당을위한 허프만 압축 프로그램을 만들고 있습니다. 나는 그것을 구현하는 방법을 알고 있지만 디코더는 인코더로 저장된 변환 테이블을 사용하거나 처음부터 허프만 트리를 생성해야하므로 디코더가 재구성 할 필요가 없도록 인코더로 완전한 허프만 트리를 저장하려고했습니다. 그것. 나는 포인터가있는 것을 저장하는 것이 동일하지 않다는 것을 알게되었다. 그래서 직렬화가 도움이 될 수 있음을 알았다. 내 주요 질문은 다음과 같습니다 :파일에 허프 먼 트리를 저장하는 데 직렬화 도움말을 사용할 수 있습니까?

1 - 직렬화 트리를 그대로 저장할 수 있습니까? 2 트리를 저장하면 변환 테이블을 저장하고 재구성하는 데 더 많은 공간이 필요합니까?

인코딩 된 파일에 저장할 트리 데이터를 최소화하려고합니다. 여기에 일반 텍스트 압축이 있습니다. - 감사합니다.

+1

'디코더는 인코더로 저장된 변환 테이블을 사용하거나 스크래치에서 허프만 트리를 만들어야합니다. 이것은 _ 정적 허프만 코딩 _이라고 들립니다. ("전송"의 모든 기호에 대해 동일한 코드/"확률"을 사용하십시오. 대안은 _ 동적 인 허프만 코딩 _입니다. 인코더와 디코더는 모두 "확률"을 수정하고 그에 따라 코드를 수정합니다 ("균등 확률"). 1- 거의 모든 부분에 따라 다르다. 한 손에는 나무에 대한 표현을, 다른 한편에는 테이블에 대한 몇 가지 표현을 제안하십시오. 그들을 비교하십시오. 다른 사람들이 찾아 사용했던 것을보십시오. – greybeard

+0

@greybeard 예, 적응 형 허프만 코딩은 분명히 단순한 것보다 훨씬 낫습니다. 그러나 지금은 단순한 것에 중점을두고 구현을 조금 다르게 만들고 싶습니다. 제안을 주셔서 감사합니다 –

답변

1

트리를 전송할 필요가 없습니다. 각 기호의 코드 길이를 확인한 후 트리를 버립니다. 그런 다음 기호의 길이와 순서에 따라 canonical code을 구성 할 수 있습니다. 그런 다음 길이 만 디코더에 전송하면 디코더는 길이만으로 동일한 표준 코드를 구성합니다.

+0

감사합니다, 나는 또한이 대답에 왔습니다. 이것은 그것을하는 제일 방법 인 것을 보인다. 하지만 튜토리얼이나 서면 알고리즘이나 의사 코드를 따라갈 수 있고 구현할 수 있습니까? –

+0

[puff.c] (https://github.com/madler/zlib/blob/master/contrib/puff/puff.c)에서 실제 코드를 볼 수 있습니다. –

관련 문제