【问题标题】:Assigning bits for huffman encoding为霍夫曼编码分配位
【发布时间】:2012-11-25 23:42:38
【问题描述】:

我找不到为字母分配 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;
    }
}

【问题讨论】:

    标签: java traversal huffman-code


    【解决方案1】:

    不确定您的具体要求,但这可能是解决您问题的一种方法

    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);
    

    【讨论】:

      【解决方案2】:

      从顶部到一个字母的分支数是位数。只需将 0 分配给左分支,将 1 分配给右分支。从上到下的遍历就是那个字母的二进制代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-11
        • 1970-01-01
        相关资源
        最近更新 更多