2013.12.19
来源:互联网 发布:建行网络贷款怎么过 编辑:程序博客网 时间:2024/05/16 06:43
* 变量声明的位置…
在while循环外声明t结点,由于在循环内通过t存储从que中remove()的结点,还要将t重新insert()到que内,这样会导致t重新指向被remove()出来的自身,出现死循环;
因此应该将t声明在while循环内,每次循环重新创建;
public static HuffNode huffEstab(PQueue que){// HuffNode t=new HuffNode(new HuffData()); while(que.number()>1){ HuffNode t=new HuffNode(new HuffData()); t.left=que.remove(); t.right=que.remove(); t.d.context='G'; t.d.freq=t.left.d.freq+t.right.d.freq; que.insert(t); } return que.remove(); }
* 霍夫编码中的优先级队列,可以以树为元素,也可以设置为以结点为元素存储,都是存储根结点;
霍夫编码树@@java/DataStructure/unit8
import java.util.*;class HuffNode{public HuffData d;public HuffNode left;public HuffNode right;public HuffNode(){d=new HuffData();left=null;right=null;}public HuffNode(HuffData d){this.d=d;left=null;right=null;}public void display(){System.out.println(d.context+", "+d.freq);}}class HuffData{public char context;public double freq;public HuffData(){context='!';freq=0.0;}public HuffData(char context, double freq){this.context=context;this.freq=freq;}}class PQueue{private HuffNode [] nArr;private int max;private int current;public PQueue(int max){this.max=max;nArr=new HuffNode [max];for(int i=0; i<max; i++) nArr[i]=null;current=0;}public void insert(HuffNode n){int i=current-1;if(this.isFull()){System.out.println("This Queue is Full! "); return;}for(; i>=0 && nArr[i].d.freq<n.d.freq; i--) nArr[i+1]=nArr[i];nArr[i+1]=n;current++;}public int number(){return current;}public HuffNode remove(){return nArr[--current];}public HuffNode peek(){return nArr[current-1];}public boolean isEmpty(){return (current==0);}public boolean isFull(){return (current==max);}public void display(){for(int i=0; i<current; i++) System.out.println("['"+nArr[i].d.context+"', "+nArr[i].d.freq+"] ");System.out.println();}}class HuffTree{public HuffNode root;public HuffTree(){root=null;}public HuffTree(HuffNode root){this.root=root;}public void inOrderTransverse(){inOrder(root);}public void inOrder(HuffNode n){if(n==null) return;else{inOrder(n.left);n.display();inOrder(n.right);}}}public class HuffCode{public static void main(String [] args){Random rand=new Random(47);HuffNode huffRoot=new HuffNode(new HuffData());HuffNode [] nArr={new HuffNode(new HuffData('A', rand.nextDouble())), new HuffNode(new HuffData('B', rand.nextDouble())), new HuffNode(new HuffData('C', rand.nextDouble())), new HuffNode(new HuffData('D', rand.nextDouble())), new HuffNode(new HuffData('E', rand.nextDouble())), };PQueue que=new PQueue(nArr.length);for(int i=0; i<nArr.length; i++) que.insert(nArr[i]);que.display();huffRoot=huffEstab(que);HuffTree huffTree=new HuffTree();huffTree.root=huffRoot;System.out.println("InOrder Transverse:");//huffTree.inOrder(huffRoot);huffTree.inOrderTransverse();}public static HuffNode huffEstab(PQueue que){//HuffNode t=new HuffNode(new HuffData());while(que.number()>1){HuffNode t=new HuffNode(new HuffData());t.left=que.remove();t.right=que.remove();t.d.context='G';t.d.freq=t.left.d.freq+t.right.d.freq;que.insert(t);}return que.remove();}}
0 0
- 2013.12.19
- 2013.12.19
- 2013.12
- 2013.12.19oracle 并行原理与示例总结 谷歌
- 2013.12.19oracle 并行(概念) dba168 谷歌
- 2013.12.01
- 2013.12.02
- 2013.12.03
- 2013.12.05
- 2013.12.06
- 2013.12.07
- 2013.12.08
- 2013.12.09
- 2013.12.10
- 2013.12.10
- 2013.12.11
- 2013.12.11
- 2013.12.12
- 抽象类与接口与模板方法设计模式
- TexturePacker资源图片拼接工具生成plist和png
- 设计模式(2) - Singleton单件模式
- 智力题——20.诚实人和说谎者
- [SQL]学习一下sql数据分页
- 2013.12.19
- mysql查询中去掉多项中某项重复值的方法
- 使用Beaglebone Black的PRU(二)——Hello World!
- Node.js express 版本出现的几个常见问题
- Android功能添加Ant的build.xml
- Mysql几种索引类型的区别及适用情况
- EL表达式(一)
- TIBCO EMS MESSAGE
- 快速查找法