自适应 Huffman Java 分配 1 和 0

Posted

技术标签:

【中文标题】自适应 Huffman Java 分配 1 和 0【英文标题】:Adaptive Huffman Java-Assigning 1s and 0s 【发布时间】:2017-03-19 20:09:00 【问题描述】:

我正在尝试找出一种将 0 和 1 分配给现有自适应霍夫曼树的有效方法。我所拥有的只是一个带有依赖子节点的节点。我试图应用于解决方案的递归方法写在下面(不是一个工作的)。我希望能够返回一串 0 和一个用于节点数据字段中保存的特定数字的字符串。我不确定我在这里缺少什么条件。基本上字符串应该是“ 0 和 1 的总和”(右边缘 = 1,左边缘 = 0)。遍历从根开始并在所需节点终止(其中数据 == 特定数据)任何建议将不胜感激。Adaptive huffman image- 规则该算法是:读入符号,即:7 到已经有一个空节点的树。然后 - 每次读入一个新符号时,创建两个节点,右边一个是包含数据的节点,左边一个是新的空节点。而且顺序从右到左递减。当相同的符号出现在流中时,我们只更新权重(即fre quency -“1”=一次出现)。要维护的 Siblings 属性-如果具有较小顺序的兄弟节点(左侧)具有比具有较大顺序(右侧)的兄弟节点更大的权重-则它们需要交换,包括子树。然而,ORDERS 将保持不变——例如,如果我们将左一个(order 124)与右一个(order 125)移动——新的右节点仍将具有 125 的顺序。

public String bc(Node n, int data)
String s=new String();
if(n!=null)
    if(n.getData()==data)
    s=s+0;
    return s;
    else if(!n.isLeaf()&&tn.)s=s+0;//This is the point I am stuck at
    bc(n.getLeftChild(),data);
    bc(n.getRightChild(),data);






return s;

public class Node 

private int order;// root has the highest order
private int weight;//frequency
private int data;//symbol
private int code;//part of a codeword
private TreeNode LeftChild,RightChild;

【问题讨论】:

包含Node 类会有所帮助。卡住的点需要比较data,决定是向左还是向右遍历。您可以通过使用左节点或右节点递归调用bc 来完成此操作。根据您拨打的电话,添加“1”或“0”。 感谢 John16384。现在我在节点中添加了字段“代码”,但我仍然不知道如何遍历树以便最终得到从根到所需的 0 和 1 字符串仅节点。 哪个包含决定如何遍历树的霍夫曼代码,datacode “代码”是包含 0 或 1 的那个。谢谢 对不起。这个问题太不清楚了。在我看来,您可以找到与data 匹配的节点(通过查看所有节点),然后获取其code 字段以获得结果。除非以某种方式对树进行排序,因此与data 进行比较以确定左或右是有意义的,否则我看不出您如何遍历它以获得“一和零”。尝试进一步澄清问题,也许用图画或其他东西。 【参考方案1】:

可行的解决方案是在每个节点字段中保留一个代码字字符串。添加另一个节点时保持更新:复制要扩展的代码字+根据节点的侧面添加新的0或1。应用时编码中的“移位”功能交换节点的代码字不应复制 - 与顺序相同。

【讨论】:

以上是关于自适应 Huffman Java 分配 1 和 0的主要内容,如果未能解决你的问题,请参考以下文章

利用 opencv实现图像自适应二值化 --python

12.1.0.2自适应特性导致SQL性能下降

关于Unity中的UGUI的屏幕自适应(多分配率适配)

table标签自适应及常用相关配置

自适应OFDM

操作系统-存储存储的分配和管理方式