问题描述
|
我真的需要有关霍夫曼编码的无损压缩方面的帮助。我即将参加考试,需要了解这一点,是否有人知道为了解这一点而编写的简单教程,或者有人可以解释。
考试中的问题可能是:
假设字母为[A,B,C],已知概率分布为P(A)= 0.6,
P(B)= 0.2和P(C)= 0.2。为了简单起见,我们还假设编码器和解码器都知道
消息的长度始终为3,因此不需要终结符。
通过霍夫曼编码对消息ACB进行编码需要多少位?你需要
为每个符号提供霍夫曼树和霍夫曼代码。 (3分)
通过算术编码来编码消息ACB需要多少位?你需要
提供编码过程的详细信息。 (3分)
使用以上结果,讨论算术编码优于霍夫曼编码的优点。
(1分)
答案:
霍夫曼代码:A-1,B-01,C-00。
编码结果为10001,因此需要5位。 (3分)
算术编码的编码过程:
符号低范围
0.0 1.0 1.0
A 0.0 0.6 0.6
碳0.48 0.6 0.12
B 0.552 0.576 0.024
最终的二进制代码字是0.1001,即0.5625。因此需要4位。 (3分)
在霍夫曼编码中,每个符号的码字长度必须为整数。但它
在算术编码中可以是小数。因此,算术编码通常更有效
如上结果所示。 (1分)
解决方法
http://zh.wikipedia.org/wiki/霍夫曼编码
如果查看树(右上),您会看到每个父节点是其下两个节点的和。节点上的值是字母的频率。二进制序列中的每一位都是树中的右/左分支。
有帮助吗?
我对算术编码并不了解,但是看起来很聪明。
,霍夫曼树是一种二叉树,其节点表示在流中具有最高分布的值在根附近被压缩,而分布在逐渐减小的值离根越来越远,因此允许将更常见的值编码为较短的位字符串,而不太常见的值编码为较长的字符串。
霍夫曼树的构造如下:
在源流中建立实体表及其分布。
选择表中分布最低的两个条目。
从这两个条目中创建一个树节点。
从表中删除刚刚使用的条目。
向表中添加一个新条目,其中删除了节点和树节点的组合分布。
如果表中剩余多个条目,请转到步骤2。
表中剩余的条目是您的根。
,基本的霍夫曼实现可以。但是,如果您是从头开始构建的,则可能需要在工具箱中使用多个其他数据结构来简化诸如minHeap和bit vector之类的事情。编码和解码的基本算法非常简单。没有与算术编码进行比较的信息。
一个实现例子