[SOLVED] 代写 Java 霍夫曼代码为字母表中的字符指定可变长度标识符。标识符的长度取决于字符出现的频率 – 字符出现的频率越高,标识符越小。标识符可以由树表示,树的叶子是字母表的字符。标识符现在由从根到叶的路径定义:如果我们接下来在路径中选择左子节点,此时标志符为0,如果旋转右子节点为1。

30 $

File Name: 代写_Java_霍夫曼代码为字母表中的字符指定可变长度标识符。标识符的长度取决于字符出现的频率_–_字符出现的频率越高,标识符越小。标识符可以由树表示,树的叶子是字母表的字符。标识符现在由从根到叶的路径定义:如果我们接下来在路径中选择左子节点,此时标志符为0,如果旋转右子节点为1。.zip
File Size: 3796.26 KB

SKU: 4334168028 Category: Tags: , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , , ,

Or Upload Your Assignment Here:


霍夫曼代码为字母表中的字符指定可变长度标识符。标识符的长度取决于字符出现的频率 – 字符出现的频率越高,标识符越小。标识符可以由树表示,树的叶子是字母表的字符。标识符现在由从根到叶的路径定义:如果我们接下来在路径中选择左子节点,此时标志符为0,如果旋转右子节点为1。

用于创建此类树的霍夫曼算法的工作原理如下:我们采用优先级队列(通过密钥在内部对项目进行排序的队列)并将字母表中的每个字符作为(未连接的)树节点插入,并将字符的频率作为优先级队列中的键。然后我们此时从优先级队列中删除两个最小的节点,创建一个新的节点,将两个删除节点作为子节点,并将这个新节点放回优先级队列中,并带有子节点的总和。在n-1次重复之后,优先级队列中只有一个元素 – 然后它代表树的根。

您现在应该使用霍夫曼代码来压缩数据。 在我们的例子中,字母表由一个字节可以假设的所有可能值组成(-128到127)。 在框架中实现以下几点:

•在HuffmanCodes类中实现buildFrequencyTable方法,该类存储frequencyTable列表中每个字节的数据的相对频率。
•在HuffmanCodes类中实现buildHuffmanTree方法,如上所述,该方法构建Huffman树上字节的频率。 将此树的根保存在huffmanTreeRoot中。 对于优先级队列,您可以使用Java类PriorityQueue。
c) 在HuffmanCodes类中实现buildHuffmanTable方法,该方法为所有字节 构造一个标识符数组(我们也可以每次在树中搜索字节以获取标识符,但这会慢 很多)。结果应存储在codeTable中。

d)在HuffmanCodes类中实现压缩和解压缩方法,该方法将给定的输入流压缩到输出流中。您可能需要使用codeTable和Huffman树。

e)在HuffmanCodes类中实现saveHuffmanTree和loadHuffmanTree方法,该方法将Huffman树存储在输出流中或者再次从输入流中读出它。在这样做时,您应该为自己考虑树的有效存储形式。但是,它不应超过400个字节。

(f)在DataCompressor类中实现压缩和解压缩方法。 压缩流应具有以下格式:首先是三个字节“AUD”,表示此数据已被我们的算法压缩。 接下来是霍夫曼树的表示。 随后,压缩字节数被存储为整数,最后是压缩数据。 首先应检查解压缩数据的前三个字符“AUD”,然后读取数据。 如果传递的数据中存在错误,则应抛出EncodingException。

Reviews

There are no reviews yet.

Only logged in customers who have purchased this product may leave a review.

Shopping Cart
[SOLVED] 代写 Java 霍夫曼代码为字母表中的字符指定可变长度标识符。标识符的长度取决于字符出现的频率 – 字符出现的频率越高,标识符越小。标识符可以由树表示,树的叶子是字母表的字符。标识符现在由从根到叶的路径定义:如果我们接下来在路径中选择左子节点,此时标志符为0,如果旋转右子节点为1。
30 $