话题
搜索

哈夫曼编码


一种无损数据压缩算法,它使用少量的比特对常见字符进行编码。哈夫曼编码近似每个字符的概率作为一个权力1/2,以避免与使用非整数位数来使用字符的实际概率对字符进行编码。

哈夫曼编码适用于权重列表{我}通过构建扩展二叉树带最小加权外部的路径长度然后找到两个最小的w个第页,第1周w_2型,视为外部节点,并将其替换为内部权重节点w_1+w_2.程序是重复进行逐步直到到达根节点。然后,单个外部节点可以由二进制字符串0(用于左分支)和1(用于右分支)编码。

哈夫曼编码

下面总结了前13个素数给出的权重2、3、5、7、11、13、17、19、23、29、31、37和41的程序,结果树如上图所示(Knuth 1997,第402-403页)。从图中可以清楚地看出,到较大权重的路径比到较小权重的路径短。在本例中,数字13将被编码为1010。

257111317192329313741
557111317192329313741
107111317192329313741
17111317192329313741
172417192329313741
2434192329313741
24344229313741
344253313741
4253653741
42536578
956578
95143
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

主题分类