Java 上 运行 规范霍夫曼代码的参考代码问题
Issues with a Reference Code for Running Canonical Huffman Code on Java
我是 运行 这里显示的 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 代码的帮助将不胜感激。
它正确地生成了代码,但随后错误地打印了它们。它省略了包含它们的代码的前导零位。在将数字转换为一串数字后,他们应该在前面加上必要的零位。
如果将打印代码的行替换为:
// 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
我是 运行 这里显示的 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 代码的帮助将不胜感激。
它正确地生成了代码,但随后错误地打印了它们。它省略了包含它们的代码的前导零位。在将数字转换为一串数字后,他们应该在前面加上必要的零位。
如果将打印代码的行替换为:
// 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