自适应 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 字符串仅节点。
哪个包含决定如何遍历树的霍夫曼代码,data
或code
?
“代码”是包含 0 或 1 的那个。谢谢
对不起。这个问题太不清楚了。在我看来,您可以找到与data
匹配的节点(通过查看所有节点),然后获取其code
字段以获得结果。除非以某种方式对树进行排序,因此与data
进行比较以确定左或右是有意义的,否则我看不出您如何遍历它以获得“一和零”。尝试进一步澄清问题,也许用图画或其他东西。
【参考方案1】:
可行的解决方案是在每个节点字段中保留一个代码字字符串。添加另一个节点时保持更新:复制要扩展的代码字+根据节点的侧面添加新的0或1。应用时编码中的“移位”功能交换节点的代码字不应复制 - 与顺序相同。
【讨论】:
以上是关于自适应 Huffman Java 分配 1 和 0的主要内容,如果未能解决你的问题,请参考以下文章