哈夫曼编码原理

2024-05-12 03:34

1. 哈夫曼编码原理


哈夫曼编码原理

2. 哈夫曼编码原理

赫夫曼码的码字(各符号的代码)是异前置码字,即任一码字不会是另一码字的前面部分,这使各码字可以连在一起传送,中间不需另加隔离符号,只要传送时不出错,收端仍可分离各个码字,不致混淆。
哈夫曼编码,又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种。Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头的平均长度最短的码字,有时称之为最佳编码,一般就叫做Huffman编码。


扩展资料
赫夫曼编码的具体方法:先按出现的概率大小排队,把两个最小的概率相加,作为新的概率 和剩余的概率重新排队,再把最小的两个概率相加,再重新排队,直到最后变成1。
每次相 加时都将“0”和“1”赋与相加的两个概率,读出时由该符号开始一直走到最后的“1”, 将路线上所遇到的“0”和“1”按最低位到最高位的顺序排好,就是该符号的赫夫曼编码。
例如a7从左至右,由U至U″″,其码字为1000;
a6按路线将所遇到的“0”和“1”按最低位到最高位的顺序排好,其码字为1001?
用赫夫曼编码所得的平均比特率为:Σ码长×出现概率
上例为:0.2×2+0.19×2+0.18×3+0.17×3+0.15×3+0.1×4+0.01×4=2.72 bit
可以算出本例的信源熵为2.61bit,二者已经是很接近了。
参考资料来源:百度百科-哈夫曼编码

3. 哈夫曼编码(理论)

哈夫曼编码是一种无损压缩文件一种方法,他的思路很简单,却又十分经典,他利用的是无重复前缀这种思想,就是每个字符的前缀是唯一的,若a的编码是001,那么就不会存在另一个以001开头的编码了,因为,哈夫曼编码是以二叉树为基础实现的,而二叉树到每一个叶子节点的路径是唯一的,那么也就是说每一个字符的编码也是唯一的。
  
 哈夫曼编码是一种变长编码,比起定长编码的ascii码来说,哈夫曼编码能节省很多的空间,因为每一个字符出现的频率不是一致的,例如在英语中,‘e’出现的次数是最高的,那么如果我把‘e’的编码定义的短一点,那么是不是比起定长编码来说,空间就减少了?
  
 基于这种思路,哈夫曼编码的具体实现过程如下:
   (1)首先统计文本中各字符出现的频率(权重)。
   (2)使用这些频率(权重),构建出哈夫曼树。
   (3)规定从根节点开始,向叶子节点行走,经过左子树,编码为0,右子树,编码为1,这样就能得到每一个叶子节点字符的编码值了。

哈夫曼编码(理论)

4. 哈夫曼编码的原理是什么?


5. 哈夫曼编码的原理

设某信源产生有五种符号u1、u2、u3、u4和u5,对应概率P1=0.4,P2=0.1,P3=P4=0.2,P5=0.1。首先,将符号按照概率由大到小排队,如图所示。编码时,从最小概率的两个符号开始,可选其中一个支 路为0,另一支路为1。这里,我们选上支路为0,下支路为1。再将已编码的两支路的概率合并,并重新排队。多次重复使用上述方法直至合并概率归一时为止。从图(a)和(b)可以看出,两者虽平均码长相等,但同一符号可以有不同的码长,即编码方法并不唯一,其原因是两支路概率合并后重新排队时,可能出现几个支路概率相等,造成排队方法不唯一。一般,若将新合并后的支路排到等概率的最上支路,将有利于缩短码长方差,且编出的码更接近于等长码。这里图(a)的编码比(b)好。赫夫曼码的码字(各符号的代码是异前置码字,即任一码字不会是另一码宇的前面部分,这使各码字可以连在一起传送,中间不需另加隔离符号,只要传送时不出错,收端仍可分离各个码字,不致混淆。实际应用中,除采用定时清洗以消除误差扩散和采用缓冲存储以解决速率匹配以外,主要问题是解决小符号集合的统计匹配,例如黑(1)、白(0)传真信源的统计匹配,采用0和1不同长度游程组成扩大的符号集合信源。游程,指相同码元的长度(如二进码中连续的一串0或一串1的长度或个数)。按照CCITT标准,需要统计2×1728种游程(长度),这样,实现时的存储量太大。事实上长游程的概率很小,故CCITT还规定:若l表示游程长度,则l=64q+r。其中q称主码,r为基码。编码时,不小于64的游程长度由主码和基码组成。而当l为64的整数倍时,只用主码的代码,已不存在基码的代码。长游程的主码和基码均用赫夫曼规则进行编码,这称为修正赫夫曼码,其结果有表可查。该方法已广泛应用于文件传真机中。

哈夫曼编码的原理

6. 哈夫曼编码


7. 哈夫曼编码的定理

在变字长编码中,如果码字长度严格按照对应符号出现的概率大小逆序排列,则其平 均码字长度为最小。现在通过一个实例来说明上述定理的实现过程。设将信源符号按出现的概率大小顺序排列为 :U: ( a1 a2 a3 a4 a5 a6 a7 ) [1] 0.20 0.19 0.18 0.17 0.15 0.10 0.01给概率最小的两个符号a6与a7分别指定为“1”与“0”,然后将它们的概率相加再与原来的 a1~a5组合并重新排序成新的原为:U′: ( a1 a2 a3 a4 a5 a6′ )0.20 0.19 0.18 0.17 0.15 0.11对a5与a′6分别指定“1”与“0”后,再作概率相加并重新按概率排序得U″:(0.26 0.20 0.19 0.18 0.17)…直到最后得 U″″:(0.61 0.39)赫夫曼编码的具体方法:先按出现的概率大小排队,把两个最小的概率相加,作为新的概率 和剩余的概率重新排队,再把最小的两个概率相加,再重新排队,直到最后变成1。每次相 加时都将“0”和“1”赋与相加的两个概率,读出时由该符号开始一直走到最后的“1”, 将路线上所遇到的“0”和“1”按最低位到最高位的顺序排好,就是该符号的赫夫曼编码。例如a7从左至右,由U至U″″,其码字为0000;a6按路线将所遇到的“0”和“1”按最低位到最高位的顺序排好,其码字为0001…用赫夫曼编码所得的平均比特率为:Σ码长×出现概率上例为:0.2×2+0.19×2+0.18×3+0.17×3+0.15×3+0.1×4+0.01×4=2.72 bit可以算出本例的信源熵为2.61bit,二者已经是很接近了。

哈夫曼编码的定理

8. 哈夫曼编码的原理是什么?

设某信源产生有五种符号u1、u2、u3、u4和u5,对应概率P1=0.4,P2=0.1,P3=P4=0.2,P5=0.1。
首先,将符号按照概率由大到小排队,如图所示。编码时,从最小概率的两个符号开始,可选其中一个支路为0,另一支路为1。这里,我们选上支路为0,下支路为1。再将已编码的两支路的概率合并,并重新排队。多次重复使用上述方法直至合并概率归一时为止。
从图(a)和(b)可以看出,两者虽平均码长相等,但同一符号可以有不同的码长,即编码方法并不唯一,其原因是两支路概率合并后重新排队时,可能出现几个支路概率相等,造成排队方法不唯一。
一般,若将新合并后的支路排到等概率的最上支路,将有利于缩短码长方差,且编出的码更接近于等长码。这里图(a)的编码比(b)好。

扩展资料
发展历史
哈夫曼编码(Huffman Coding),又称霍夫曼编码。
1951年,哈夫曼和他在MIT信息论的同学需要选择是完成学期报告还是期末考试。导师Robert M. Fano给他们的学期报告的题目是,寻找最有效的二进制编码。
由于无法证明哪个已有编码是最有效的,哈夫曼放弃对已有编码的研究,转向新的探索,最终发现了基于有序频率二叉树编码的想法,并很快证明了这个方法是最有效的。
由于这个算法,学生终于青出于蓝,超过了他那曾经和信息论创立者香农共同研究过类似编码的导师。哈夫曼使用自底向上的方法构建二叉树,避免了次优算法Shannon-Fano编码的最大弊端──自顶向下构建树。
1952年,David A. Huffman在麻省理工攻读博士时发表了《一种构建极小多余编码的方法》(A Method for the Construction of Minimum-Redundancy Codes)一文,它一般就叫做Huffman编码。
参考资料来源:百度百科-哈夫曼编码