繁体   English   中英

如何从霍夫曼树生成霍夫曼码

[英]How to generate Huffman codes from huffman tree

我正在用C ++制作jpeg编码器。 我成功创建了霍夫曼树,但是如何从树生成霍夫曼代码呢? 我尝试过的一种方法是将0分配给左分支,1分配给右分支,就像在图片中一样,但是这种方法存在一个问题,因为一个元素将被编码为全部(如图中的sibol E)用11)编码,但jpeg标准不允许所有的霍夫曼代码。

在此输入图像描述

如果你不能使用全1的字符串,那么你不一定能获得最佳代码(在某些约束条件下是最佳的,我的意思是)。

如果你在字符串中追加一个“0”,那么它就不再是“1”了。 您仍然会有前缀代码,而不是最佳代码。 这样就足够了,但我不知道这是不是jpeg编码器应该做的。 我原以为会有一个标准的解决方案。

JPEG使用基于统计信息的固定树。 所以你永远不会得到最优的代码。 必须使用固定树,因为它是以有效方式分发霍夫曼树的唯一方法(否则你必须将树保留在文件中,这使文件更大)。 我假设树在标准文档中描述。

我发现这是生成jpeg霍夫曼代码的完全错误的方法。 霍夫曼表是通过两个步骤的统计集合生成的,这些步骤在JPEG标准的附录K中给出。 此外,同一文件的附件C中没有提供详细信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM