介绍
上一篇文章我们讲到了哈夫曼树,相信看官们对其也有一定的了解了
https://www.jianshu.com/p/bad3472aae5a(需先理解何为哈夫曼树)
哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是**可变字长编码(VLC)**的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码。
举个例子
我们有 A, B, C, D 四个字符,他们的出现频率分别是1,2,3,4(这也是他们的权值)
这个时候,我们根据哈夫曼树的生成方式,将其构建成一个哈夫曼树
之后,我们再给它的路径添加上代码(左分支0,右分支1)
最后得出 A,B,C,D的哈夫曼编码分别是100,101,11,0
java代码实现
package tree;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Created by Sheldon on 2019/4/11.
* Project Name: alstudy.
* Package Name: tree.
*/
// 数据类
class Data{
public char key;
public int value;
public Data(char key, int value){
this.key = key;
this.value = value;
}
}
// 结点结构
class CodeNode{
// 权值
Data data;
// 左结点
CodeNode leftChild;
// 右结点
CodeNode rightChild;
public CodeNode(Data data){
this.data = data;
}
public CodeNode(Data data, CodeNode leftChild, CodeNode rightChild){
this.leftChild = leftChild;
this.rightChild = rightChild;
this.data = data;
}
}
public class HuffmanCode {
/**
* 创建哈弗曼树
* @param datas
* @return
*/
public static CodeNode createHuffman