繁体   English   中英

分配用于霍夫曼编码的位

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM