您的位置:首页 > 其它

《算法概论》第六周作业——利用哈夫曼编码英文字母表

2014-04-15 17:34 399 查看
作业要求:对教材P167中习题5.18,思考并完成问题a-d。

题目如图1-1所示:



1-1
注:本题数字有误,以下题目是将空格的概率改为17.3%做的。

(1)根据字母及空格出现的频率,可构造哈夫曼树,如图1-2



1-2

利用哈夫曼编码定义,可得出哈夫曼编码为:

z:1111011000

q:1111011001

x:1111011010

j: 1111011011

k:11110111

v:1111010

b:100100

p:100101

y:111100

g:101100

f:101101

w:111110

m:111111

u:01000

c:01001

l:10011

d:10111

r:0000

h:0001

s:0101

n:0110

i:0111

o:1000

a:1010

t:1110

e:001

空格:110

(2)根据哈夫曼树不难得出字母编码平均位数为:(10*4+8+7+6*7+5*4+4*8+3*2)/27=5.7407

(3)我认为熵的值比以上计算结果要大,因为每一个字母编码实际中是整数,而以上计算为小数。

(4)我认为不是。英文的复杂度比较高,譬如大家都有这个感受,你去翻译英语的时,很大一段英文翻译成中文也就几行而已,足以证明英文的冗余度比较高,即重复比较多,故我不认为利用字母压缩可以达到英文文本压缩的下线。我觉得应该按照英文词根,前后缀考虑,可以更好的压缩英文文本。

作业感想:构造哈夫曼树是个痛苦的过程.......刚开始看到那个算法只是觉得单纯的把树的高度往上加就可以了,不过坐到后面发现想法完全是错的,要选择“集合”中最小的元素构成二叉树,然后再找最小的俩,用visio做刚开始一大堆小的分支,真的是一步错,步步错。了解了熵的概念,不过香农大大留给我们了一串公式,用起来还是比较费事,可能是并没有足够理解熵的原因。

注:因后期检查发现哈夫曼树形成的时候空格(17.3%)与之相连的有错误,导致下面哈夫曼编码有误,请读者自行修改。

最后附上构造的哈夫曼树的下载地址:http://download.csdn.net/detail/bbyyo/7197653
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: