Tree 使用哈夫曼代码压缩文件的步骤

Tree 使用哈夫曼代码压缩文件的步骤,tree,performance,binary-tree,huffman-code,Tree,Performance,Binary Tree,Huffman Code,我知道有很多问题涉及到哈夫曼代码,包括我自己的另一个问题,但我想知道什么才是真正编码文本文件的最佳方式。减压似乎微不足道;遍历树,在0处向左,在1处向右,打印字符 但是,如何进行压缩呢?以某种方式将角色的位表示存储在其节点树中?每次遇到角色时,在树中搜索该角色,并跟踪步骤?这种编码方式重要吗 到目前为止,我有一个哈夫曼树,其中叶节点没有与其关联的二进制值。我的问题是将二进制值分配给树中的每个字符 谢谢好吧,如果你打算以字符为基础对文件进行编码,我看不出问题所在,只需保留符号的哈希表,然后构建一棵

我知道有很多问题涉及到哈夫曼代码,包括我自己的另一个问题,但我想知道什么才是真正编码文本文件的最佳方式。减压似乎微不足道;遍历树,在0处向左,在1处向右,打印字符

但是,如何进行压缩呢?以某种方式将角色的位表示存储在其节点树中?每次遇到角色时,在树中搜索该角色,并跟踪步骤?这种编码方式重要吗

到目前为止,我有一个哈夫曼树,其中叶节点没有与其关联的二进制值。我的问题是将二进制值分配给树中的每个字符


谢谢

好吧,如果你打算以字符为基础对文件进行编码,我看不出问题所在,只需保留符号的哈希表,然后构建一棵树,并使用你想要的任何约定将其写在文件的开头,然后对文本应用新的字母表。请看中采用的方法,该方法用于压缩PNG图像

编辑

现在还不清楚问题出在哪里

在树中搜索每个角色 遇到它的时间,并跟踪 台阶

树中的每个节点表示一个唯一的符号。您不必搜索任何内容,只有在计算了每个符号的出现次数后,才能构建哈夫曼树


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

如果您要对文件进行字符编码,我看不出问题所在,只需保留符号的哈希表,然后构造一棵树,并使用您想要的任何约定将其写入文件的开头,然后对文本应用新的字母表。请看中采用的方法,该方法用于压缩PNG图像

编辑

现在还不清楚问题出在哪里

在树中搜索每个角色 遇到它的时间,并跟踪 台阶

树中的每个节点表示一个唯一的符号。您不必搜索任何内容,只有在计算了每个符号的出现次数后,才能构建哈夫曼树


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

当每个节点连接到“当前根”时(那时你已经知道它去哪里了,向左还是向右,所以你知道它是0还是1),您可以将其遍历到叶并修改其当前代码。但是,对我来说,这听起来效率不高。我更希望先构建一棵树,而不是遍历一次并将字母表对存储在哈希表中。当每个节点连接到“当前根”时(那时你已经知道它去哪里了,向左还是向右,所以你知道它是0还是1),你可以遍历它到叶子并修改它们当前的代码。但是,这对我来说并不高效。我宁愿先构建一棵树,而不是遍历一次并将字母表对存储在哈希表中。我看了这篇文章,意识到我在CS职业生涯中已经走了多远。当事情终于开始点击时,这是一种奇妙的感觉。这这个问题现在对我来说太可笑了。我看了这篇文章,意识到我在CS职业生涯中已经走了多远。当事情终于开始好转时,这是一种奇妙的感觉。这个问题现在对我来说太可笑了。