哈夫曼编码又称赫夫曼编码,是赫夫曼为了解决当年远距离通信(主要是电报)的数据传输的最优化问题提出的。哈夫曼编码是一种可变字长的编码方式,主要目的是根据使用频率来最大化节省字符(编码)的存储空间。
哈夫曼树
如何绘制哈夫曼树呢?假设我们在网络传输一段文字CADABCADAEFC,一般会转换为二进制0和1进行传输。
字母 A B C D E F
二进制 000 001 010 011 100 101
上面字母二进制编码串:010 000 011 000 001 010 000 011 000 100 101 010 36个字符
根据各个字母出现的频率绘制哈夫曼树来规划:A出现4次 B出现1次 C出现3次 D出现2次 E和F各1次,从小到大排序为BEFDCA
区出现频率最小的B、E两个字符作为起始,其总出现频率为2次,大于F的1次,那么F在左,2在右,依次进行比较,比较完成后左枝干标记为0,右枝干标记为1,就形成了哈夫曼树,如下图:
哈夫曼编码:
字母 A B C D E F
二进制 0 11110 10 110 11111 1110
新编码二进制:100 110 011 110 100 110 011 111 111 010 30个字符
节约了大概17%的存储和传输成本,现实中字符长度会很长,那么这个压缩效果会更明显。