如何为java中的Huffman解码/编码项目导出树数据结构?

如何为java中的Huffman解码/编码项目导出树数据结构?,java,data-structures,tree,huffman-code,Java,Data Structures,Tree,Huffman Code,我有一个项目作为任务,我还没有实施它,但我已经想出了它的想法,但最后一步是我无法想出的,甚至如何实施。这就是我想从我的项目中得到的: 我想使用java创建一个基于文本的压缩模型。我将创建一个哈夫曼编码器和解码器,并将这些程序存储在两台计算机中:PC1和PC2 现在在PC1中,我将提供一个“data.txt”文件作为哈夫曼编码器程序的输入,它将创建另一个名为“binary.txt”的文件,其中包含0和1。现在,我将不发送“data.txt”文件,而是通过电子邮件将“binary.txt”文件发送到

我有一个项目作为任务,我还没有实施它,但我已经想出了它的想法,但最后一步是我无法想出的,甚至如何实施。这就是我想从我的项目中得到的:

我想使用java创建一个基于文本的压缩模型。我将创建一个哈夫曼编码器和解码器,并将这些程序存储在两台计算机中:PC1和PC2

现在在PC1中,我将提供一个“data.txt”文件作为哈夫曼编码器程序的输入,它将创建另一个名为“binary.txt”的文件,其中包含0和1。现在,我将不发送“data.txt”文件,而是通过电子邮件将“binary.txt”文件发送到PC2,并使用那里的解码器java程序,尝试重新创建“data.txt”。这样我就可以使用哈夫曼机制压缩我的文件

所以问题是我不熟悉java(到目前为止我并不害怕java),我不知道如何从PC1中导出树数据结构以及“binary.txt”文件,因为对于Huffman解码(稍后在PC2中),我需要访问在PC1中创建的Huffman树,那么,我该如何着手解决或创建这个项目呢

有没有其他更好的方法来实施这个项目?Hashmap或splay树或任何其他数据结构


谢谢

您不需要将哈夫曼树导出到您的
binary.txt
文件中。您需要一个映射,它将文本中的所有符号映射到(0,1)-字符串-用于编码,您需要一个反向映射-用于解码。您应该使用哈夫曼算法构建树,然后-使用此树填充地图。在那之后,你就可以忘记那棵树了


因此,您的“binary.txt”文件必须只包含某种形式的反向映射,解码器可以理解。

您不需要将哈夫曼树导出到
binary.txt文件中。您需要一个映射,它将文本中的所有符号映射到(0,1)-字符串-用于编码,您需要一个反向映射-用于解码。您应该使用哈夫曼算法构建树,然后-使用此树填充地图。在那之后,你就可以忘记那棵树了



因此,您的“binary.txt”文件必须仅包含某种形式的反向映射,解码器可以理解。

如果创建规范的哈夫曼表示,则只能传输代码长度。解码器可以从这些树中重新创建树。

如果创建规范的哈夫曼表示,则只能传输代码长度。解码器可以从这些文件中重新创建树。

我不知道哈夫曼编码,但听起来您对将树结构序列化和反序列化为某种可转换格式(如文本文件)感兴趣,我猜您会将其与binary.txt文件一起发送。您应该看看树遍历算法,并找出一种利用这些算法的方法。这个问题也可以提供一个解决方案:通常,当我想要导出一棵树时,我会执行“顺序遍历”并打印(或写入流)每个节点。或者另一方面,假设我创建了一个类,并创建了该特定类的一个对象,然后为该特定对象将一个名为“length”的属性设置为5。我是否可以在另一个java程序中使用该值?同样在发布了这个问题之后,我遇到了另一个网站,其中提到了一些关于在导出引用时包含头文件的内容。你知道这两件事吗?@rohitkrishna094也许你在考虑对象序列化@罗曼:是的,我想这正是我需要的。谢谢。我不知道哈夫曼编码,但听起来你对将树结构序列化和反序列化成某种可转换格式感兴趣,比如文本文件,我想你会将其与binary.txt文件一起发送。您应该看看树遍历算法,并找出一种利用这些算法的方法。这个问题也可以提供一个解决方案:通常,当我想要导出一棵树时,我会执行“顺序遍历”并打印(或写入流)每个节点。或者另一方面,假设我创建了一个类,并创建了该特定类的一个对象,然后为该特定对象将一个名为“length”的属性设置为5。我是否可以在另一个java程序中使用该值?同样在发布了这个问题之后,我遇到了另一个网站,其中提到了一些关于在导出引用时包含头文件的内容。你知道这两件事吗?@rohitkrishna094也许你在考虑对象序列化@罗曼:是的,我想这正是我需要的。谢谢。但是我项目的主要目的是将“data.txt”的大小减少到“binary.txt”(哈夫曼编码的1和0)的大小。那么,我是否可以传输这个binary.txt文件,让解码器读取并解码它?而且如果我使用映射,我必须将“binary.txt”和可逆映射传输到接收器端(在我的例子中是PC2),对吗?那么,这不会比原始的“data.txt”文件(在某些情况下)占用更多的空间吗?如果文本很短,那么是的-反向映射占用的空间将占整个二进制文件的很大比例。但在这种情况下,压缩没有意义。对于非常长的文本,反向映射将占用二进制文件的一小部分。因此,如果我有更长的文本,那么反向映射技术更容易实现,对吗?但是如果我有较短的文件,有没有一种方法可以使用哈夫曼技术进行压缩,在这种情况下,压缩没有意义,但是有没有一种方法可以在不丢失任何数据的情况下对其进行压缩)。但是我的项目的主要目的是将“data.txt”的大小减少到“binary.txt”(哈夫曼编码的1和0)的大小。那么,我是否可以传输这个binary.txt文件,让解码器读取并解码它?而且,如果我使用映射,我必须将“binary.txt”和可逆映射传输到接收器端(在我的例子中是PC2)