文章目录

  • 一、题目说明
  • 二、解答

一、题目说明

假设用于通信的电文仅由8个字母组成,字母在电文中出现的频率分别为0.07,0.19, 0.02, 0.06, 0.32, 0.03, 0.21, 0.10。
1)试为这8个字母设置哈夫曼编码。
2)试设计另一种由二进制表示的等长编码方案。
3)对于上述实例,比较两种方案的优缺点。

二、解答

1)可以将频率放大100倍,以方便计算,不影响哈夫曼树的构造。

w={7, 19, 2, 6, 32, 3, 21, 10},根据哈夫曼树的构造规则(参考博文:哈夫曼树和哈夫曼编码)得出以下的哈夫曼树:

2)哈夫曼编码和定长编码如下表所示:

字母编号 出现频率 哈夫曼编码 等长编码
1 0.07 1010 000
2 0.19 00 001
3 0.02 10000 010
4 0.06 1001 011
5 0.32 11 100
6 0.03 10001 101
7 0.21 01 110
8 0.10 1011 111

注意:构造出的哈夫曼树可能不同从而使得编码不同,这是因为左右子树的位置不是固定的,但是往往我们习惯于左子树根权值小于右子树,两子树权值相同时较矮的子树在左边。虽然哈夫曼树可能不同,但是WPL必然相同并且最优。
3)对于上述的两种方案。定长编码明显比哈夫曼编码更加简单。但是,哈夫曼编码是最优前缀编码。对于n个字符的数据文件来说,分别以它们的出现次数为权值构造哈夫曼树,则该树对应的哈夫曼编码对文件进行编码,能够使得该文件压缩过后对应的二进制文件的长度最短
哈夫曼编码对应二叉树的WPL为:
WPL=2*(0.19+0.32+0.21)+4*(0.07+0.06+0.10)+5*(0.02+0.03)=2.61
等长编码对应二叉树的WPL为:
WPL=3*(0.19+0.32+0.21+0.07+0.06+0.10+0.02+0.03)=3

数据结构作业-严蔚敏-5.2.(3)相关推荐

  1. 数据结构作业-严蔚敏-5.3

    文章目录 一.题目描述 二.解答 1)判别两棵树是否相等 2)交换二叉树每个结点的左孩子和右孩子 3)计算二叉树的最大宽度 一.题目描述 以二叉链表作为二叉树的存储结构,编写下列算法: 1)判别两棵树 ...

  2. Dijkstra 算法-《数据结构》严蔚敏

    应用介绍 假定某个销售做年度出差计划,每次需要从固定城市出发,去其它城市推销产品,那么问题就来了,如果求得从固定城市到其它拜访城市的最短路径或最小时间呢? 这就是一个典型的Dijkstra求解问题. ...

  3. 数据结构:严蔚敏、殷人昆快速排序规则不同的疑问

    快速排序 Partition 过程:将要排序的数据分成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小.快速排序整个排序过程可以递归进行,以此达到整个数据变成有序序列. 注:408原题 ...

  4. 《数据结构》严蔚敏与陈越伪代码总结

    1 //陈 2 typedef struct LNode *List;3 struct LNode{4 int Data[MaxSize];//如果放多个元素,这个可改为指针,在初始化中指向数组 5 ...

  5. 数据结构(严蔚敏)的一些排序算法源代码

    最近找工作时经常会被问到各种排序算法,现在把严蔚敏书中的排序算法摘抄出来,以便随时学习,顺便测试下windows live writer的代码着色插件是否好用 1.InsertSort直接插入排序 隐 ...

  6. 《数据结构》严蔚敏第二版 2.53 循环链表,双向链表

    ps:我现在是大二上,这个学期修数据结构,知识点是我上课,下课在书上,网上各种地方找到理解了之后写出来的这些东西,可能会有错误(请C友们指正),这个学期会把数据结构更新完,一些比较简单的增删改查我第一 ...

  7. 数据结构(严蔚敏版)循环队列——C语言

    大家好!我是一名二本学校努力的大二学生,正在努力学习数据结构,打算将其所有结构的源码写出与大家一起交流,期待与大家一起进步,互相成长!!! 循环队列 由一组地址连续的储存单元依次存放从队列头到队尾的元 ...

  8. 数据结构(严蔚敏、吴伟民)——读书笔记-1、绪论

    第一章    绪论 <数据结构>主要研究内容: 1.数据的各种逻辑结构和物理结构,以及他们之间的相应关系 2.并对每种结构定义相适应的各种运算 3.设计出相应的算法 4.分析算法的效率 常 ...

  9. 线性表的增加C语言实现,数据结构(严蔚敏)C语言实现---线性表的顺序存储

    总觉得写的代码差点什么,所以回过头开始看数据结构,真正去实现一下. 这次看的是线性表的顺序存储,代码如下: 1.为了增加代码可读性,用了一些宏定义,文件名称为BaseDefine.h,内容如下: #i ...

最新文章

  1. Office 365系列(7)------ Exchange 2013与Office 365 Hybrid混合部署Step by Step参考
  2. DRF——路由控制器
  3. 如何不让php自动把times换成×号
  4. mysql group_concat
  5. 傅里叶变换及其应用 pdf_级数的欧拉变换及其应用
  6. POJ-2407 欧拉函数
  7. python flask restful api_python之restful api(flask)获取数据
  8. 微软想证明Windows比Chrome好 主要源自恐惧?
  9. 64qam星座图matlab,16QAM_星形和矩形星座图调制解调MATLAB代码(最新整理)
  10. Unity游戏开发经验点滴
  11. MySQL卸载与安装
  12. 开关电源基础知识(上)_拓扑类型、效率与输入输出及占空比的关系
  13. OpenCv图像处理之颜色通道分离与多通道融合、图像线性融合
  14. 【目标检测】方法概述
  15. 量化投资学习——技术指标介绍
  16. 社交产品分析:共同看片,微光
  17. win10找不到便签(便利贴)怎么办,Win10找回便签功能的方法
  18. 计算机休眠唤醒后 网络受限,Windows 10中的睡眠/唤醒/休眠状态后,Wi-Fi网络消失...
  19. CLIENT_ACKNOWLEDGE机制测试
  20. 华为ESNP,路由器和交换机连接电脑不同网段的解决方法。

热门文章

  1. “500 - 内部服务器错误。”解决办法
  2. 文件夹的隐藏选项为灰色勾选,无法更改或删除
  3. Eclipse官方汉化方法
  4. 地理遥感专业属于计算机行业吗,遥感科学与技术专业怎么样?
  5. 编写strcpy函数
  6. 微信个性签名服务器维护,微信个性签名更改不了系统维护
  7. HDU1849 SG函数
  8. IDE工具(27) idea点击箭头快速切换到相关联的类位置 (Free MyBatis插件)
  9. 基于STM32的无线通信模块使用——HC_05蓝牙串口
  10. 一道笔试题(求质数乘积)