第六周作业1——利用哈夫曼编码英文字母表
来源:互联网 发布:运行python 批处理 编辑:程序博客网 时间:2024/04/20 21:38
作业要求: 对教材P167中习题5.18,思考并完成问题a-d。(原书PDF下载地址:算法概论[英文原版].pdf)
习题如下:
解:
(a):
画出这些字母的最优二叉树:(根节点值为101不是100,应该是空格的出现频率18.3%有误,若改为17.3%就正确.但我已画完图,将错就错吧...)
根据叶子节点在其父节点的左侧为0, 在右侧为1,可知这些字母的最优Huffman编码是:
/* 字母表的最优Huffman编码e: 001blank: 110n: 0000i: 0001s: 0100h: 0101r: 0110a: 1000o: 1010t: 1110c: 01110u: 01111l: 10011d: 11110f: 100100w: 100101y: 101100g: 100101b: 100110p: 100111m: 111110v: 1111110k: 11111110x: 1111111100j: 1111111101q: 1111111110z: 1111111111*/
(b):
有问题(a)可得, (3*2+4*8+5*4+6*7+7+8+10*4)/27≈ 5.74 ;
即每个字母的编码平均需要6位.
(c):
结果肯定比熵(约为5.74)要大,因为在计算熵的时候允许有小数个比特,而实际上每个字符的编码长度都必需为整数.
(d):
我不认为这就是英文文本压缩的下限.
除了字母及其出现的频率,还可以重点考虑单词的前缀,后缀,某些常见字母的组合,甚至整个单词.
0 0
- 第六周作业——利用哈夫曼编码英文字母表
- 第六周作业——利用哈夫曼编码英文字母表
- 第六周作业——利用哈夫曼编码英文字母表
- 第六周作业——利用哈夫曼编码英文字母表
- 第六周作业——利用哈夫曼编码英文字母表
- 第六周作业——利用哈夫曼编码英文字母表
- 第六周作业—利用哈夫曼编码英文字母表
- 第六周作业—利用哈夫曼编码英文字母表
- 第六周作业1 -- 利用哈夫曼编码英文字母表
- 第六周作业1 -- 利用哈夫曼编码英文字母表
- 第六周作业1--利用哈夫曼编码英文字母表
- 第六周作业1-利用哈夫曼编码英文字母表
- 第六周作业1------利用哈夫曼编码英文字母表
- 第六周作业1 -- 利用哈夫曼编码英文字母表
- 第六周作业1——利用哈夫曼编码英文字母表】
- 第六周作业1——利用哈夫曼编码英文字母表
- 第六周作业1——利用哈夫曼编码英文字母表
- 第六周作业1——利用哈夫曼编码英文字母表
- 打车软件两马相争谁得利
- 技术从业方向总结
- 淘金网UCskype视频会议概述
- SEO需要学会做网站吗
- C#与android使用DES加密图片文件互通
- 第六周作业1——利用哈夫曼编码英文字母表
- 不要为了转化率而只关注转化率停一停想一想
- Cannot find executable for CFBundle XXX
- 几款很棒的 JavaScript 表单美化和验证插件
- PDO中包含三个预定义的类,它们分别是PDO、PDOStatement、PDOException
- score
- AIX 安装nrpe出现 Cannot find ssl libraries错误
- WSAEWOULDBLOCK
- C++的存储持续性(自动、静态、动态),作用域,链接性