一种无损数据压缩算法,它使用少量的比特对常见字符进行编码。哈夫曼编码近似每个字符的概率作为一个权力1/2,以避免与使用非整数位数来使用字符的实际概率对字符进行编码。
哈夫曼编码适用于权重列表通过构建扩展二叉树带最小加权外部的路径长度然后找到两个最小的第页,和,视为外部节点,并将其替换为内部权重节点.程序是重复进行逐步直到到达根节点。然后,单个外部节点可以由二进制字符串0(用于左分支)和1(用于右分支)编码。
下面总结了前13个素数给出的权重2、3、5、7、11、13、17、19、23、29、31、37和41的程序,结果树如上图所示(Knuth 1997,第402-403页)。从图中可以清楚地看出,到较大权重的路径比到较小权重的路径短。在本例中,数字13将被编码为1010。
2 | 三 | 5 | 7 | 11 | 13 | 17 | 19 | 23 | 29 | 31 | 37 | 41 |
| 5 | 5 | 7 | 11 | 13 | 17 | 19 | 23 | 29 | 31 | 37 | 41 |
| | 10 | 7 | 11 | 13 | 17 | 19 | 23 | 29 | 31 | 37 | 41 |
| | | 17 | 11 | 13 | 17 | 19 | 23 | 29 | 31 | 37 | 41 |
| | | 17 | | 24 | 17 | 19 | 23 | 29 | 31 | 37 | 41 |
| | | | | 24 | 34 | 19 | 23 | 29 | 31 | 37 | 41 |
| | | | | 24 | 34 | | 42 | 29 | 31 | 37 | 41 |
| | | | | | 34 | | 42 | 53 | 31 | 37 | 41 |
| | | | | | | | 42 | 53 | 65 | 37 | 41 |
| | | | | | | | 42 | 53 | 65 | | 78 |
| | | | | | | | | 95 | 65 | | 78 |
| | | | | | | | | 95 | | | 143 |
| | | | | | | | | | | | 238 |
以下内容Wolfram语言代码可用于构建内部节点列表和迭代表:
HuffmanStep[l0_List]:=模块[{l=l0,s2=取[Select[Sort[l0],Positive],2]},l[[Take[Flatten[Position[l,#]&/@s2],2]]=0;l[[Last[Position[l,0]]]=Plus@@s2;{l,s2}]HuffmanList[l_List]:=模块[{},加上@@@Last/@NestWhileList[HuffmanStep[First[#]]&,霍夫曼步长[l],长度[Union[First[#]]>2&]]哈夫曼表[l_List]:=NestWhileList[First[HuffmanStep[#]]&,l,长度[并口[#]]>2&]
与Wolfram一起探索| Alpha
工具书类
霍夫曼博士。“最小冗余码的构造方法。”程序。仪表无线电工程。 40,1098-1101中,1952科努特,D.E。这个计算机编程艺术,第1卷:基本算法,第3版。马萨诸塞州雷丁:Addison-Wesley,第402-406页,1997年。出版社,W.H。;弗兰纳里,B.P。;Teukolsky,S.A。;和维特林,W.T。“哈夫曼数据编码和压缩。“Ch.20.4英寸数字的FORTRAN:科学计算的艺术,第二版。英国剑桥:剑桥大学出版社,第896-9011992页。施瓦兹,E.S。“具有最小最长代码和总位数的最佳编码。”信息和控制 7, 37-44, 1964.参考Wolfram | Alpha
哈夫曼编码
引用如下:
埃里克·魏斯坦(Eric W.Weisstein)。“哈夫曼编码”。来自数学世界--Wolfram Web资源。https://mathworld.wolfram.com/HuffmanCoding.html
主题分类