[英]Assigning bits for huffman encoding
我在寻找一种为字母分配0和1的方法时遇到了麻烦。 我固定了优先级队列,这样它将使所有节点首先成为具有最高优先级的树。 我对如何分配每个字母的值不了解。 我当时在考虑使用有序遍历,但是在将位添加到字母时会停留在该代码的外观上。 非常感谢所有帮助! 我的节点类如下:
private class Node{
Node right;
Node left;
Node parent;
char letter;
int value;
String binaryValue = "";
private Node(char c, int in, Node parent, Node left, Node right){
letter = c;
value = in;
this.left = left;
this.right = right;
this.parent = parent;
}
@SuppressWarnings("unused")
private void setRight(Node right){
this.right = right;
}
@SuppressWarnings("unused")
private void setLeft(Node left){
this.left = left;
}
private void setParent(Node parent){
this.parent = parent;
}
private Node getParent(){
return parent;
}
@SuppressWarnings("unused")
private void setWeight(int weight){
this.value += weight;
}
private void setBinary(String binary){
binaryValue = binary;
}
private String getBinary(){
return binaryValue;
}
}
不确定您要问的是什么,但这可能是您解决问题的一种方法
char letter = c;
byte[] bytes = letter.getBytes();
StringBuilder binary = new StringBuilder();
for (byte b : bytes)
{
int val = b;
for (int i = 0; i < 8; i++)
{
binary.append((val & 128) == 0 ? 0 : 1);
val <<= 1;
}
binary.append(' ');
}
System.out.println(binary);
从顶部到一个字母的分支数就是位数。 只需将0分配给左分支,将1分配给右分支。 这样,从上到下的遍历就是该字母的二进制代码。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.