我知道有很多涉及霍夫曼代码的问题,包括我自己的另一个问题,但我想知道实际编码文本文件的最佳方法是什么。减压似乎微不足道;遍历树,向左走0,向右走1,打印角色。
但是,如何进行压缩?以某种方式将字符的位表示存储在树的节点中?每次遇到字符时搜索树,并跟踪步骤?这是什么方式编码是否重要?
到目前为止,我有一个霍夫曼树,其中叶节点没有与它们相关联的二进制值。我的麻烦是将二进制值分配给树中的每个字符。
由于
答案 0 :(得分:0)
好吧,如果你要基于字符编码文件,我看不出问题,只需保留符号的哈希表,然后构建一个树&使用您想要的任何约定将其写入文件的开头,然后将新字母应用于文本。看看DEFLATE中采用的方法,该方法用于压缩PNG图像。
修改强>
问题是什么并不是很清楚。
在树中搜索每个字符 它遇到的时间和追踪 步骤是什么?
树中的每个节点都代表一个唯一的符号。您不必搜索任何内容,只有在计算了每个符号的出现时才能构造霍夫曼树。
所以你已经开发了一个构造树的算法,问题是关于如何将二进制值分配给节点?或者在哪里存储这些值?树本身自然地表示二进制值,您可以在树构造期间实际跟踪它们,只需在插入操作中保留项目“路径”的轨迹并将该值存储在节点内,或者如果不存在则创建哈希表想要修改节点实体。