- packagecom.eshore.sweetop.cupidity;
- importjava.util.ArrayList;
- publicclassHuffman{
- privatechar[]c={'a','b','c','d','e','f'};
- privateint[]f={45,13,12,16,9,5};
- classNode{
- chardata;
- intkey;
- Nodeleft;
- Noderight;
- publicStringtoString(){
- return"[key="+key+",data="+data+",left="+left+",right"+right+"]";
- }
- }
- classQListextendsArrayList<Node>{
- //其实可以写成最小堆,让复杂度减少到lg(n)
- Nodemin(){
- intmin=Integer.MAX_VALUE;
- Nodenode=null;
- for(inti=0;i<size();i++){
- Nodend=get(i);
- if(nd.key<min){
- min=nd.key;
- node=nd;
- }
- }
- this.remove(node);
- returnnode;
- }
- }
- publicNodehuffman(){
- intn=c.length;
- QListql=newQList();
- for(inti=0;i<c.length;i++){
- Nodenode=newNode();
- node.key=f[i];
- node.data=c[i];
- ql.add(node);
- }
- for(inti=0;i<n-1;i++){
- Nodez=newNode();
- Nodex=ql.min();
- z.left=x;
- Nodey=ql.min();
- z.right=y;
- z.key=x.key+y.key;
- ql.add(z);
- }
- returnql.min();
- }
- publicstaticvoidmain(String[]args){
- Huffmanhf=newHuffman();
- //赫夫曼树的根节点
- Nodenode=hf.huffman();
- System.out.println(node);
- }
- }
算法之赫夫曼编码
最新推荐文章于 2020-05-06 17:21:18 发布