使用优先队列实现Huffman树

Posted 上后谈爱情

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用优先队列实现Huffman树相关的知识,希望对你有一定的参考价值。

 1 package com.mmall.common.Test;
 2 
 3 import java.util.Comparator;
 4 import java.util.PriorityQueue;
 5 import java.util.Queue;
 6 
 7 /**
 8  * Created by Workstation on 2017/8/9.
 9  */
10 public class HuffmanCode {
11 
12    private class HuffNode implements Comparable<HuffNode>
13     {
14         HuffNode Left;
15         HuffNode Right;
16         int val;
17 
18         public HuffNode (HuffNode left, HuffNode right, int val) {
19             Left = left;
20             Right = right;
21             this.val = val;
22         }
23 
24         @Override
25         public int compareTo (HuffNode o) {
26             return this.val-o.val;
27         }
28     }
29 
30 
31 
32 
33     public void CreateHuffmanTree(int [] weight)
34     {
35         //创建一个优先的队列;其中的值按照最小堆方式创建
36         PriorityQueue<HuffNode> priorityQueue=new PriorityQueue<HuffNode> ();
37 
38 
39         for(int i=0;i<weight.length;i++)
40         {
41             HuffNode node=new HuffNode (null,null,weight[i]);
42             priorityQueue.add(node);
43         }
44 
45         HuffNode node1=null;// 最小权值点
46         HuffNode node2=null;// 次最小权值点
47         HuffNode node3=null;//合并的值
48 
49         for(int j=0;j<weight.length-1;j++)
50         {
51             node1=priorityQueue.poll ();
52             node2=priorityQueue.poll ();
53             node3=new HuffNode (node1,node2,node1.val+node2.val);
54             priorityQueue.offer(node3);
55         }
56 
57         System.out.println(priorityQueue.peek ().val);
58     }
59 }

 

以上是关于使用优先队列实现Huffman树的主要内容,如果未能解决你的问题,请参考以下文章

堆(优先队列)求huffman WPL

POJ - 1521 Entropy (Huffman编码)

Huffman树及其编码(STL array实现)

UVa10954 Add All (Huffman编码,优先队列)

Huffman编码

UVA - 10954 Add All (全部相加)(Huffman编码 + 优先队列)