1.Huffman编码简介
Huffman编码是依靠Huffman树来实现的,Huffman树是带全路径长度最小的二叉树。
树的带权路径长度为所有叶子节点的权值与到根节点路径长度的乘积之和,公式为:
Huffman编码以根节点到叶子节点的路径来编码的,左为0,右为1
1.1Huffman编码示意图
由这个huffman树得出得huffman编码为:a011,b100,c0001,d00001,e11,f101,g000000,h0010,i010,j0011,k000001。
2.代码思路
用python实现这个需要注意两点,一是根据叶子节点的权值也就是编码字母的值来反向建立huffman树。二是通过建立好的huffman树生成huffman编码。
建立huffman树的主要思路是在给的权值中选最小的和第二小建立节点。将它俩的和放入之前的权值列表再选择其中最小和第二小的,以此循环。
生成huffman编码的思路是用一个列表记录其路径,左为0右为1。当然,为了Huffman树唯一,规定左孩子的值必须小于等于右孩子的值。
3.python代码
#节点类
|
4.总结
Huffman树与Huffman编码都是以二叉树为依托的,二叉树是数据结构中非常重要的一环,用python来实现它不仅能将这个知识吃透彻,还能锻炼自己的编程能力。还能偷点小懒,可以不用笔算了输入字母的权值,一秒出答案。