2011-04-16 86 views
2

我知道有很多涉及霍夫曼代码的问题,包括来自我自己的另一个问题,但我想知道实际编码文本文件的最佳方式是什么。减压似乎微不足道;遍历树,向左走0,向右走1,打印字符。使用霍夫曼代码压缩文件的步骤

虽然,怎么去压缩?以某种方式将字符的位表示存储在树的节点中?在每次遇到该字符时搜索树并追踪步骤?这是编码的方式是否重要?

到目前为止,我有一个huffman树,叶节点没有与它们相关的二进制值。我的麻烦是将二进制值分配给树中的每个字符。

感谢

+0

我看着这篇文章,并意识到我的CS事业有多远。当事情最终点击时,这是一种惊人的感觉。这个问题现在对我来说似乎非常荒谬。 – 2013-10-10 01:05:08

回答

0

好吧,如果你要编码的字符基础上的一个文件,我看不出这个问题,只是不停的符号哈希表,然后构造一个树&它写在开头使用任何你想要的约定的文件,在文本上应用新的字母表。看看DEFLATE中采用的方法,该方法用于压缩PNG图像。

编辑

这是不是真的清楚是什么问题。

在树上搜索字符每个 遇到它的时间并跟踪 的步骤?

树中的每个节点表示一个唯一的符号。你不必搜索任何东西,只有当你已经计算出每个符号的出现时,才可以构造霍夫曼树。

因此,您已经开发出构建树的算法,问题是如何将二进制值分配给节点?或者在哪里存储这些值?树本身自然地表示二进制值,您可以在树构建过程中实际跟踪它们,只需在插入操作中保留项目“路径”的轨迹并将该值存储在节点内,或者如果不需要创建哈希表想要修改节点实体。

+0

当每个节点连接到“当前根”(当时你已经知道它到了哪里,向左或向右,所以你知道它是0还是1),你可以遍历它到修改和修改当前的代码。但是,这对我来说听起来不太有效。我宁愿先构造一棵树,然后遍历一次并将字母对存储在一个散列表中。 – n535 2011-04-17 13:15:54