CLRS 16.3赫夫曼编码

来源:互联网 发布:js二进制转base64编码 编辑:程序博客网 时间:2024/06/06 19:18

16.3-1
首先我们有以下几个不等式:

x.freqy.freqa.freqb.freqx.freqa.freqy.freqb.freq

x.freq=b.freq,则由第一、四两个不等式得:b.freq=x.freqy.freqb.freq,所以 y.freq=b.freq
另外一个可类似证明。最后得到 a.freq=b.freq=x.freq=y.freq

16.3-2
假设有一颗不满的二叉树的最优前缀码,存在某个非叶结点 x 只有一个孩子,一定存在一个叶结点 y,这个叶结点的深度大于 x.dpeth+1,将结点 y 变成结点 x 的孩子结点可以减少 y 的深度,变换之后的前缀码比最优前缀码更优,这与假设矛盾,因此不满二叉树不可能对应一个最优前缀码。

16.3-3
编码如下:
这里写图片描述
推广前 n 个斐波那契数的最优前缀码如下:
这里写图片描述

16.3-4
书上的代价计算公式是:B(T)=cCc.freqdT(c)
当计算所有内部结点的两个孩子结点的联合概率之和时,如果我们针对某一个叶结点 cc.freq 会被每个 c 的祖先结点算一次,一共 dT(c) 次,这和书上的公式一样的。

16.3-5
证明略。

16.3-6
按书上的提示,用 2n1 位表示树的结构,内部节点用 1 表示,叶子节点用 0 表示。树高为 lgn。因此每个字母的二进制编码长度为 lgn,用 nlgn 位依次表示树上每一个叶子分别是 0,..,n1哪个数,总共需要nlgn 位。

16.3-7
那就推广到树的结点有三个孩子结点,生成满三叉树,证明过程类似于书上的证明,略。

16.3-8
记出现最低频率字符的频率是 f,赫夫曼编码代价:B(T)=cCc.freqdT(c)cCfdT(c)。即所有叶结点的深度之和。当树 T 是一个完全的平衡二叉树时代价达到最小。因此有 B(T)fcCdT(c)f2569
8 位字符组成的数据文件代价 B(T)=cC8f(c)cC2f8=25682f

16.3-9
证明略

注:CLRS 16.4、16.5节答案略

0 0
原创粉丝点击