1、基本介绍
(1)赫夫曼编码也翻译为 哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式。属于一种程序算法。赫夫曼编码是赫夫曼树在电信通讯中经典的应用之一。
(2)赫夫曼编码被广泛地应用于数据文件压缩。其压缩率通常在20%~90%之间。
(3)赫夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方式,称为最佳编码。
2、原理剖析
(1)通信领域中信息的处理方式1——定长编码
(2)通信领域中信息处理方式2——变长编码
(3)通信领域中信息的处理方式3——赫夫曼编码
步骤:
1)从小到大进行排序,每一个数据都是一个节点,每个节点都可以看作一个最简单的二叉树
2)取出根节点权值最小的二叉树
3)组成一个新的二叉树,该新的二叉树的根节点权值是前面两颗二叉树根节点的权值和
4)再将这颗新的二叉树,以根节点的权值大小再次排序,不断重复1-2-3-4的步骤,直到数列中,所有的数据都被处理,就得到一颗赫夫曼树。
5)根据赫夫曼树,给各个字符规定编码(前缀编码),向左的路径为0向右的路径为1,编码如下:
o: 1000 u: 10010 d: 100110 y:100111 i: 101 a: 101 k: 1110 e: 1111 j: 0000 v:0001 l: 001 : 01
6) 按照上面的赫夫曼编码,我们的"i like like like java do you like a java" 字符串对应的编码为(注意我们这里使用的无损压缩):
10111101111010011011110111100101011110111101000011000011100110011110000110 10101001 0111100010010010011011110111 01i100100001100001110 通过赫夫曼编码处理 长度为133
7)原来长度为359,压缩了(359-133) / 359 = 62.9%
8)此编码满足前缀编码,即字符的编码都不能是其他字符编码的前缀。不会造成匹配的多义性。赫夫曼编码是无损处理方案。