【问题标题】:Issues with a Reference Code for Running Canonical Huffman Code on Java在 Java 上运行规范霍夫曼代码的参考代码问题
【发布时间】:2021-05-09 20:40:58
【问题描述】:

我正在运行此处显示的 Java 程序来生成规范的霍夫曼代码,https://www.geeksforgeeks.org/canonical-huffman-coding/

虽然代码给出了正确的规范霍夫曼代码和显示的输入,但对于其他情况,我没有发现代码是前缀代码并且是正确的。例如,

    **Input**

    char[] chararr = {  '0',  '1',  '2', '3', '4',  '5', '6', '7', '8', '9'};
    int[] freq = {119,173 ,186 ,134 ,134 ,8 ,220 ,216 ,145 ,10 };

   **Output**

   1:0
   2:1
   3:10
   4:11
   6:100
   7:101
   8:110
   0:1110
   5:11110
   9:11111

在给定代码中分配规范代码的逻辑似乎是正确的;但是,我没有得到正确的结果,这可能是由于为给定字符集和频率查找代码长度的早期阶段。任何有关调试此 Java 代码的帮助将不胜感激。

【问题讨论】:

  • 我得到了同样的东西。绝对是错误的代码。

标签: java debugging huffman-code canonicalization text-compression


【解决方案1】:

它正确生成代码,但打印错误。它正在去掉具有它们的代码的前导零位。在将数字转换为数字字符串后,他们应该在前面加上必要的零位。

如果您将打印代码的行替换为:

// Display the canonical codes
String code = Integer.toBinaryString(c_code);
while (code.length() < curr_len)
    code = "0" + code;
System.out.println(it.next() + ":" + code);

然后你得到正确的输出:

1:000
2:001
3:010
4:011
6:100
7:101
8:110
0:1110
5:11110
9:11111

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-04-18
    • 1970-01-01
    • 1970-01-01
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    相关资源
    最近更新 更多