信息论与编码课程设计哈夫曼编码的分析与实现

信息论与编码课程设计哈夫曼编码的分析与实现
信息论与编码课程设计哈夫曼编码的分析与实现

信息论与编码课程设计哈夫曼编码的分析与实现

吉林建筑大学

电气与电子信息工程学院

信息理论与编码课程设计报告

设计题目:哈夫曼编码的分析与实现

专业班级:电子信息工程 101

学生姓名:

学号:

指导教师:吕卅王超

设计时间: .11.18- .11.29

一、设计的作用、目的

《信息论与编码》是一门理论与实践密切结合的课程,课程设计是其实践性教学环节之一,同时也是对课堂所学理论知识的巩固和补充。其主要目的是加深对理论知识的理解,掌握查阅有关资料的技能,提高实践技能,培养独立分析问题、解决问题及实际应用的能力。

经过完成具体编码算法的程序设计和调试工作,提高编程能力,深刻理解信源编码、信道编译码的基本思想和目的,掌握编码的基本原理与编码过程,增强逻辑思维能力,培养和提高自学能力以及综合运用所学理论知识去分析解决实际问题的能力,逐步熟悉开展科学实践的程序和方法 二、设计任务及要求

经过课程设计各环节的实践,应使学生达到如下要求: 1. 理解无失真信源编码的理论基础,掌握无失真信源编码的基本方法;

2. 掌握哈夫曼编码/费诺编码方法的基本步骤及优缺点;

3. 深刻理解信道编码的基本思想与目的,理解线性分组码的基本原理与编码过程;

4. 能够使用MATLAB 或其它语言进行编程,编写的函数要有通用性。 三、设计内容

一个有8个符号的信源X ,各个符号出现的概率为:

12345678,,,,,

()0.40.180.10.10.070.060.050.04X x x x x x x x x P X ????=????????

编码方法:先将信源符号按其出现的概率大小依次排列,并取概率最小的字母分别配以0和1两个码元(先0后1或者先1后0,以后赋值固定),再将这两个概率相加作为一个新字母的概率,与未分配的二进制符号的字母重新排队。并不断重复这一过程,直到最后两个符号配以0和1为止。最后从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即为对应的码字。

哈夫曼编码方式得到的码并非唯一的。在对信源缩减时,两个概率最小的符号合并后的概率与其它信源符号的概率相同时,这两者在缩减中的排序将会导致不同码字,但不同的排序将会影响码字的长度,一般讲合并的概率放在上面,这样可获得较小的码方差。

四、设计原理

4.1哈夫曼编码步骤

(1)将信源消息符号按照其出现的概率大小依次排列为

≥Λ

1

2

pn

p

p≥

(2)取两个概率最小的字母分别配以0和1两个码元,并将这两个概率相加作为一个新的概率,与未分配的二进制符号的字母重新排队。

(3)对重新排列后的两个最小符号重复步骤(2)的过程。

(4)不断重复上述过程,知道最后两个符号配以0和1为止。

(5)从最后一级开始,向前返回得到的各个信源符号所对应的码元序列,即为相应的码字。

4.2哈夫曼编码特点

哈夫曼编码是用概率匹配的方法进行信源匹配方法进行信源。它的特点是:

(1)哈夫曼的编码方法保证了概率大的符号对应于短码,概率小的符号对应于长码,充分应用了短码。

(2)缩减信源的最后两个码字总是最后一位不同,从而保证了哈夫曼编码是即时码。

(3)哈夫曼编码所形成的码字不是唯一的,但编码效率是唯一的,在对最小的两个速率符号赋值时能够规定大的为“1”,小得为“0”,如果两个符号的出现概率相等时,排列时无论哪个在前都能够,因此哈夫曼所构造的码字不是唯一的,对于同一个信息源,无论上述的顺序如何排列,她的平均码长是不会改变的,因此编码效率是唯一的。

(4)只有当信息源各符号出现的概率很不平均的时候,哈夫曼编码的效果才明显。

(5)哈夫曼编码必须精确的统计出原始文件中每个符号出现频率,如果没有这些精确的统计将达不到预期效果。哈夫曼编码一般要经过两遍操作,第一遍进行统计,第二遍产生编码,因此编码速度相对慢。另外实现电路复杂,各种长度的编码的编译过程也是比较复杂的,因此解压缩的过程也比较慢。

(6)哈夫曼编码只能用整数来表示单个符号,而不能用小数,这很大程度上限制了压缩效果。哈夫曼所有位都是合在一起的,如果改动其中一位就能够使其数据变得面目全非。

五、设计步骤

5.1以框图形式画出哈夫曼编码过程(哈夫曼编码要求构建哈夫曼树)。

表1 哈夫曼编码

哈夫曼树:

给定n个实数w1,w2,......,wn(n 2),求一个具有n个结点的二叉数,使其带权路径长度最小。所谓树的带权路径长度,就是树中所有的叶结点的权值乘上其到根结点的路径长度(若根结点为0层,叶结点到根结点的路径长度为叶结点的层数)。树的带权路径长度为

哈夫曼树编码译码实验报告(DOC)

数据结构课程设计设计题目:哈夫曼树编码译码

目录 第一章需求分析 (1) 第二章设计要求 (1) 第三章概要设计 (2) (1)其主要流程图如图1-1所示。 (3) (2)设计包含的几个方面 (4) 第四章详细设计 (4) (1)①哈夫曼树的存储结构描述为: (4) (2)哈弗曼编码 (5) (3)哈弗曼译码 (7) (4)主函数 (8) (5)显示部分源程序: (8) 第五章调试结果 (10) 第六章心得体会 (12) 第七章参考文献 (12) 附录: (12)

在当今信息爆炸时代,如何采用有效的数据压缩技术节省数据文件的存储空间和计算机网络的传送时间已越来越引起人们的重视,哈夫曼编码正是一种应用广泛且非常有效的数据压缩技术。哈夫曼编码是一种编码方式,以哈夫曼树—即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。哈弗曼编码使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。这张编码表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用较长的编码,这便使编码之后的字符串的平均期望长度降低,从而达到无损压缩数据的目的)。哈夫曼编码的应用很广泛,利用哈夫曼树求得的用于通信的二进制编码称为哈夫曼编码。树中从根到每个叶子都有一条路径,对路径上的各分支约定:指向左子树的分支表示“0”码,指向右子树的分支表示“1”码,取每条路径上的“0”或“1”的序列作为和各个叶子对应的字符的编码,这就是哈夫曼编码。哈弗曼译码输入字符串可以把它编译成二进制代码,输入二进制代码时可以编译成字符串。 第二章设计要求 对输入的一串电文字符实现哈夫曼编码,再对哈夫曼编码生成的代码串进行译码,输出电文字符串。通常我们把数据压缩的过程称为编码,解压缩的过程称为解码。电报通信是传递文字的二进制码形式的字符串。但在信息传递时,总希望总长度能尽可能短,即采用最短码。假设每种字符在电文中出现的次数为Wi,编码长度为Li,电文中有n种字符,则电文编码总长度为∑WiLi。若将此对应到二叉树上,Wi为叶结点的权,Li为根结点到叶结点的路径长度。那么,∑WiLi 恰好为二叉树上带权路径长度。因此,设计电文总长最短的二进制前缀编码,就是以n种字符出现的频率作权,构造一棵哈夫曼树,此构造过程称为哈夫曼编码。设计实现的功能: (1) 哈夫曼树的建立; (2) 哈夫曼编码的生成; (3) 编码文件的译码。

信息论与编码试卷与答案

一、(11’)填空题 (1)1948年,美国数学家香农发表了题为“通信的数学理论”的长篇论文,从而创立了信息论。 (2)必然事件的自信息是 0 。 (3)离散平稳无记忆信源X的N次扩展信源的熵等于离散信源X的熵的 N倍。 (4)对于离散无记忆信源,当信源熵有最大值时,满足条件为__信源符号等概分布_。 (5)若一离散无记忆信源的信源熵H(X)等于2.5,对信源进行等长的无失真二进制编码,则编码长度至少为 3 。 (6)对于香农编码、费诺编码和霍夫曼编码,编码方法惟一的是香农编码。(7)已知某线性分组码的最小汉明距离为3,那么这组码最多能检测出_2_______个码元错误,最多能纠正___1__个码元错误。 (8)设有一离散无记忆平稳信道,其信道容量为C,只要待传送的信息传输率R__小于___C(大于、小于或者等于),则存在一种编码,当输入序列长度n足够大,使译码错误概率任意小。(9)平均错误概率不仅与信道本身的统计特性有关,还与___译码规则____________和___编码方法___有关 三、(5')居住在某地区的女孩中有25%是大学生,在女大学生中有75%是身高1.6米以上的,而女孩中身高1.6米以上的占总数的一半。 假如我们得知“身高1.6米以上的某女孩是大学生”的消息,问获得多少信息量? 解:设A表示“大学生”这一事件,B表示“身高1.60以上”这一事件,则 P(A)=0.25 p(B)=0.5 p(B|A)=0.75 (2分) 故 p(A|B)=p(AB)/p(B)=p(A)p(B|A)/p(B)=0.75*0.25/0.5=0.375 (2分) I(A|B)=-log0.375=1.42bit (1分) 四、(5')证明:平均互信息量同信息熵之间满足 I(X;Y)=H(X)+H(Y)-H(XY) 证明:

信息论与编码课程设计报告

目录 一:实验原理----------------------------1 二:程序源代码--------------------------1 三:实验分析-----------------------------6 四:实验结论---------------------------7

赫夫曼编码 一:实验原理 哈夫曼编码的具体步骤归纳如下: ① 概率统计(如对一幅图像,或m幅同种类型图像作灰度信号统计),得到n个不同概率的信息符号。 ② 将n个信源信息符号的n个概率,按概率大小排序。 ③ 将n个概率中,最后两个小概率相加,这时概率个数减为n-1个。 ④ 将n-1个概率,按大小重新排序。 ⑤ 重复③,将新排序后的最后两个小概率再相加,相加和与其余概率再排序。 ⑥ 如此反复重复n-2次,得到只剩两个概率序列。 ⑦ 以二进制码元赋值,构成哈夫曼码字。编码结束。 哈夫曼码字长度和信息符号出现概率大小次序正好相反,即大 概信息符号分配码字长度短,小概率信息符号分配码字长度长。 C、哈夫曼编码的特点 (1)哈夫曼编码的构造顺序明确,但码不是唯一的(因以大赋1还是小的赋1而异;

(2)哈夫曼编码的字长参差不齐,硬件实现不方便; (3)只有在概率分布很不均匀时,哈夫曼编码才有显著的效果,而在信源分布均匀时,一般不使用哈夫曼编码。 二:程序源代码: #define MAXVALUE 10000 #define MAXLEAF 30 #define MAXNODE 59 #define MAXBIT 10 #define LENTH 30 #include "" #include typedef struct{ float gailv; int flag; int parent; int lchild; int rchild; char ch; int t; }HNodeType; typedef struct{ int bit[MAXBIT]; int start; }HCodeType; typedef struct{ float gailv; char letter; }mytype; /*it's the type of data save in file*/ typedef struct filehuff{ int count; mytype mydata[MAXLEAF]; filehuff(){count=0; }; }; filehuff filedata; char code[MAXVALUE]; HNodeType HuffNode[MAXNODE]; void savetofile() { FILE *fp;

信息论与编码课程总结

信息论与编码 《信息论与编码》这门课程给我带了很深刻的感受。信息论是人类在通信工程实践之中总结发展而来的,它主要由通信技术、概率论、随机过程、数理统计等相结合而形成。它主要研究如何提高信息系统的可靠性、有效性、保密性和认证性,以使信息系统最优化。学习这门课程之后,我学到了很多知识,总结之后,主要有以下几个方面: 首先是基本概念。信息是指各个事物运动的状态及状态变化的方式。消息是指包括信息的语言、文字和图像等。信号是消息的物理体现,为了在信道上传输消息,就必须把消息加载到具有某种物理特性的信号上去。信号是信息的载荷子或载体。信息的基本概念在于它的不确定性,任何已确定的事物都不含有信息。信息的特征:(1)接收者在收到信息之前,对其内容是未知的。(2)信息是能使认识主体对某一事物的未知性或不确定性减少的有用知识。(3)信息可以产生,也可以消失,同时信息可以被携带、存储及处理。(4)信息是可以量度的,信息量有多少的差别。编码问题可分解为3类:信源编码、信道编 码、加密编码。= 理论上传输的最少信息量 编码效率实际需要的信息量。 接下来,学习信源,重点研究信源的统计特性和数学模型,以及各类离散信源的信息测度 —熵及其性质,从而引入信息理论的一些基本概念和重要结论。本章内容是香农信息论的基础。重点要掌握离散信源的自信息,信息熵(平均自信息量),条件熵,联合熵的的概念和求法及其它们之间的关系,离散无记忆的扩展信源的信息熵。另外要记住信源的数学模型。通过学习信源与信息熵的基本概念,了解了什么是无记忆信源。信源发出的序列的统计性质与时间的推移无关,是平稳的随机序列。当信源的记忆长度为m+1时,该时刻发出的符号与前m 个符号有关联性,而与更前面的符号无关,这种有记忆信源叫做m 阶马尔可夫信源。若上述条件概率与时间起点无关,则信源输出的符号序列可看成齐次马尔可夫链,这样的信源叫做齐次马尔可夫信源。之后学习了信息熵有关的计算,定义具有概率为 () i p x 的符号i x 的自信息量为:()log ()i i I x p x =-。自信息量具有下列特性:(1) ()1,()0i i p x I x ==(2)()0,()i i p x I x ==∞(3)非负性(4)单调递减性(5)可加 性。信源熵是在平均意义上来表征信源的总体特征,它是信源X 的 函数,一般写成H (X )。信源熵:()()log ()i i i H X p x p x =-∑,条件熵:(|)(,)log (|) i j i j ij H X Y p x y p x y =-∑联合 熵(|)(,)log (,)i j i j ij H X Y p x y p x y =-∑,联合熵 H(X,Y)与熵H(X)及条件熵H(Y|X)的关系: (,)()(|)()(|)H X Y H X H Y X H X H X Y =+=+。互信息: ,(|)(|)(;)(,)log ()(|)log () () j i j i i j i j i ij i j j j p y x p y x I X Y p x y p x p y x p y p y = = ∑ ∑ 。熵的性质:非负性,对称性,确定 性,极值性。 接下来接触到信道,知道了信道的分类,根据用户数可以分为,单用户和多用户;根

哈夫曼编码与译码的实现

数据结构课程设计评阅书

2011—2012学年第一学期 专业:信息管理与信息系统学号: 1021024016 姓名:万永馨 课程设计名称:数据结构课程设计 设计题目:哈夫曼编码与译码的实现 完成期限:自 2012 年 2 月 20 日至 2012 年 3 月 2 日共 2 周 设计依据、要求及主要内容(可另加附页): 该设计题目将按以下要求完成: 哈夫曼编码与译码是信息传输中应用的经典算法,运用C或VC++结合数据结构等基础知识,按 以下要求编程实现各种进制的转换。 任务要求:1)阐述设计思想,画出流程图;2)需要对哈夫曼编码/译码的相关原理有所了解,设计数 据结构,建立必要的信息数据文件(最好存储成外部文件),并分析完成用户所需的基本操作功能;3)实现给定信息的编码和译码功能;4)应有较好的界面设计,说明程序测试方法;5)按照格式要 求完成课程设计说明书。 设计要求: 1)问题分析和任务定义:根据设计题目的要求,充分地分析和理解问题,明确问题要求做什么?(而不是怎么做?)限制条件是什么?确定问题的输入数据集合。 2)逻辑设计:对问题描述中涉及的操作对象定义相应的数据类型,并按照以数据结构为中心的 原则划分模块,定义主程序模块和各抽象数据类型。逻辑设计的结果应写出每个抽象数据类型的定 义(包括数据结构的描述和每个基本操作的功能说明),各个主要模块的算法,并画出模块之间的调 用关系图; 3)详细设计:定义相应的存储结构并写出各函数的伪码算法。在这个过程中,要综合考虑系统 功能,使得系统结构清晰、合理、简单和易于调试,抽象数据类型的实现尽可能做到数据封装,基 本操作的规格说明尽可能明确具体。详细设计的结果是对数据结构和基本操作做出进一步的求精, 写出数据存储结构的类型定义,写出函数形式的算法框架; 4)程序编码:把详细设计的结果进一步求精为程序设计语言程序。同时加入一些注解和断言, 使程序中逻辑概念清楚; 5)程序调试与测试:能够熟练掌握调试工具的各种功能,设计测试数据确保程序正确。调试正 确后,认真整理源程序及其注释,形成格式和风格良好的源程序清单和结果; 6)结果分析:程序运行结果包括正确的输入及其输出结果和含有错误的输入及其输出结果。算 法的时间、空间复杂性分析; 7)编写课程设计报告; 以上要求前三个阶段的任务完成后,将设计说明书的草稿交指导老师面审,审查合格方可进入 后续阶段的工作。设计工作结束,经指导老师验收合格后将设计说明书装订,并答辩。

信息论与编码试卷及答案(多篇)

一、概念简答题(每题5分,共40分) 1.什么是平均自信息量与平均互信息,比较一下这两个概念的异同? 答:平均自信息为 表示信源的平均不确定度,也表示平均每个信源消息所提供的信息量。 平均互信息 表示从Y获得的关于每个X的平均信息量,也表示发X前后Y的平均不确定性减少的量,还表示通信前后整个系统不确定性减少的量。 2.简述最大离散熵定理。对于一个有m个符号的离散信源,其最大熵是多少? 答:最大离散熵定理为:离散无记忆信源,等概率分布时熵最大。 最大熵值为。 3.解释信息传输率、信道容量、最佳输入分布的概念,说明平均互信息与信源的概率分布、信道的传递概率间分别是什么关系? 答:信息传输率R指信道中平均每个符号所能传送的信息量。信道容量是一个信道所能达到的最大信息传输率。信息传输率达到信道容量时所对应的输入概率分布称为最佳输入概率分布。 平均互信息是信源概率分布的∩型凸函数,是信道传递概率的U型凸函数。 4.对于一个一般的通信系统,试给出其系统模型框图,并结合此图,解释数据处理定理。 答:通信系统模型如下:

数据处理定理为:串联信道的输入输出X、Y、Z组成一个马尔可夫链,且有, 。说明经数据处理后,一般只会增加信息的损失。 5.写出香农公式,并说明其物理意义。当信道带宽为5000Hz,信噪比为30dB时求信道容量。 .答:香农公式为,它是高斯加性白噪声信道在单位时间内的信道容量,其值取决于信噪比和带宽。 由得,则 6.解释无失真变长信源编码定理。 .答:只要,当N足够长时,一定存在一种无失真编码。 7.解释有噪信道编码定理。 答:当R<C时,只要码长足够长,一定能找到一种编码方法和译码规则,使译码错误概率无穷小。 8.什么是保真度准则?对二元信源,其失真矩阵,求a>0时率失真函数的和? 答:1)保真度准则为:平均失真度不大于允许的失真度。 2)因为失真矩阵中每行都有一个0,所以有,而。 二、综合题(每题10分,共60分) 1.黑白气象传真图的消息只有黑色和白色两种,求:

信息论与编码课程设计..

吉林建筑大学 电气与电子信息工程学院信息理论与编码课程设计报告 设计题目:哈夫曼编码的分析与实现专业班级:电子信息工程101 学生姓名: 学号: 指导教师:吕卅王超 设计时间:2013.11.18-2013.11.29

一、设计的作用、目的 《信息论与编码》是一门理论与实践密切结合的课程,课程设计是其实践性教学环节之一,同时也是对课堂所学理论知识的巩固和补充。其主要目的是加深对理论知识的理解,掌握查阅有关资料的技能,提高实践技能,培养独立分析问题、解决问题及实际应用的能力。 通过完成具体编码算法的程序设计和调试工作,提高编程能力,深刻理解信源编码、信道编译码的基本思想和目的,掌握编码的基本原理与编码过程,增强逻辑思维能力,培养和提高自学能力以及综合运用所学理论知识去分析解决实际问题的能力,逐步熟悉开展科学实践的程序和方法 二、设计任务及要求 通过课程设计各环节的实践,应使学生达到如下要求: 1. 理解无失真信源编码的理论基础,掌握无失真信源编码的基本方法; 2. 掌握哈夫曼编码/费诺编码方法的基本步骤及优缺点; 3. 深刻理解信道编码的基本思想与目的,理解线性分组码的基本原理与编码过程; 4. 能够使用MATLAB 或其他语言进行编程,编写的函数要有通用性。 三、设计内容 一个有8个符号的信源X ,各个符号出现的概率为: 编码方法:先将信源符号按其出现的概率大小依次排列,并取概率最小的字母分别配以0和1两个码元(先0后1或者先1后0,以后赋值固定),再将这两个概率相加作为一个新字母的概率,与未分配的二进制符号的字母重新排队。并不断重复这一过程,直到最后两个符号配以0和1为止。最后从最后一级开始,向前返回得到各个信源符号所对应的码元序列,即为对应的码字。 哈夫曼编码方式得到的码并非唯一的。在对信源缩减时,两个概率最小的符号合并后的概率与其他信源符号的概率相同时,这两者在缩减中的排序将会导致不同码字,但不同的排序将会影响码字的长度,一般讲合并的概率放在上面, 12345678,,,,, ()0.40.180.10.10.070.060.050.04X x x x x x x x x P X ????=????????

信息论与编码教学大纲

《信息论与编码》课程教学大纲、课程基本信息 二、课程内容及基本要求 第一章绪论 课程内容:

1 ?信息论之父--香农;信息论与香农信息论的形成与发展;香农信息论的中心 问题及其局限性; 2.信息、消息、信号、信息的本质、信息的广义性; 3.通信系统基本模型:信源、信宿、信道、干扰、噪声、信源编码、信道编码。基本要求:1.了解信息论之父---Shannon(香农)和香农信息论的基本思想及其局限性;了解信息论的形成与发展过程;了解香农信息论的基本思想(中心问题)及其适用范围;2.理解消息、信息与信号的含义;理解消息、信息与信号之间的联系与区别;3.熟悉通信系统的基本模型及各模块的主要功能。 本章重点香农信息论的中心问题、通信系统模型 本章难点:信息、消息与信号的联系与区别;香农信息论的局限性第二章信源、信息量和信息熵 课程内容: 1.无记忆信源与有记忆信源、离散信源与连续信源、离散序列信源、马尔可夫信源、离散无记忆信源、离散无记忆序列信源; 2.非平均信息量、信源熵、条件信息量、条件熵、噪声熵、损耗熵、联合熵、非平均互信息、平均互信息; 3.熵的性质、离散无记忆信源的序列熵、离散有记忆信源的序列熵;4.数据处理中信息的变化、连续信源熵;5.凸函数、互信息量的凸性,冗余度。 基本要求: 1.了解并掌握信源的分类与特点; 2.理解并掌握非平均信息量、信源熵、互信息量、条件熵、联合熵、非平均互信息量、平均互信息的概念,计算;理解并掌握信源熵、信宿熵、噪声熵、损耗熵、平均

互信息之间的关系; 3.理解马尔可夫信源的概念、理解离散序列信源熵的概念; 4.理解熵的性质、熵的唯一性原理;理解连续信源的熵及连续熵的性质; 5.理解凸函数的含义和性质;了解凸函数在信息论中的应用。 本章重点:非平均自信息量、条件信息量、互信息量、条件互信息量、熵、条件熵、熵的性质 本章难点:平均互信息量、熵、离散序列信源熵、马尔可夫信源、条件熵、噪声熵、损耗熵第三章信源编码 课程内容: 1.编码的定义与分类;奇异码与非奇码;唯一可译码与非唯一可译码;即时码与非即时码;克拉夫特不等式;码树;平均码长的计算;信息传输速率;2.无失真信源编码;定长码与定长编码定理;变长码与变长编码定理;最佳变长码编码定理;香农编码及其过程;费诺编码及其过程;哈夫曼编码及其过程;3.限失真信源编码;常用信源编码--- 游程编码、算术编码、预测编码、变换编码。 基本要求: 1.理解并掌握编码的分类及特点;掌握平均码长的计算;掌握码树的使用; 2.理解无失真信源编码的含义;掌握定长码的特点与编码原理;掌握不定长编 码的特点与编码原理; 3.掌握离散无记忆信源的等长编码及不等长编码;掌握香农编码原理、掌握费 诺编码原理;掌握哈夫曼编码原理; 4.了解常用限失真信源编码方法—算术编码、游程编码、预测编码及变换编码的编码原理。

数据结构课程设计哈夫曼编译码器

《数据结构》课程设计 设计题目:哈弗曼编/译码器 专业:网络工程 班级:24070901 学号:2407090133 姓名:王璇

目录 1. 问题描述……………………………………………第 2页 2. 系统设计……………………………………………第 2页 3. 数据结构与算法描述………………………………第 5页 4. 测试结果与分析……………………………………第 6页 5. 总结 (10) 6. 参考文献 (10) 附录程序源代码 (11)

课程设计题目 1. 问题描述 利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码(复原)。试为这样的信息传输写一个哈夫曼编/译码系统。 2. 系统设计 2.1 设计目标 一个完整的系统应具有以下功能: 1)I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。输出哈夫曼树,及各字符对应的编码。 2)W:输入(Input)。从终端读入需要编码的字符串s,将字符串s存入文件Tobetran.txt中。 3)E:编码(Encoding)与译码(Decoding)。 编码(Encoding)。利用已建好的哈夫曼树(如不在内存,则从文件htmTree中读入),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。 译码(Decoding)。利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。 印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码写入文件CodePrint中。 4)T:印哈夫曼树(Tree Printing)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。 5)Q:退出程序。返回WINDOWS界面。 2.2 设计思想 哈夫曼编码(Huffman Coding)是一种编码方式,以哈夫曼树─即最优二叉树,带权路径长度最小的二叉树,经常应用于数据压缩。是指使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。这种方法是由David.A.Huffman发展起来的。例如,在英文中,e 的出现概率很高,而z的出现概率则最低。当利用哈夫曼编码对一篇英文进行压缩时,e极有可能用一个位(bit)来表示,而z则可能花去25个位(不是26)。用普通的表示方法时,每个英文字母均占用一个字节(byte),即8个位。二者相比,e使用了一般编码的1/8的长度,z 则使用了3倍多。倘若我们能实现对于英文中各个字母出现概率的较准确的估算,就可以大幅

信息论与编码课程设计报告书

信息论与编码课程设计报告设计题目:判断唯一可译码、香农编码 专业班级电信12-03 学号7 学生琳 指导教师成凌飞 教师评分 2015年3月21日

目录 一、设计任务与要求 (2) 二、设计思路 (2) 三、设计流程图 (3) 四、程序运行及结果 (4) 五、心得体会 (6) 参考文献 (7) 附录:源程序 (8)

一、设计任务与要求 通过本次课程设计的练习,使学生进一步巩固信源熵、信源编码的基本原理,掌握具体的编码方法,熟悉编程软件的使用,培养学生自主设计、编程调试的开发能力,同时提高学生的实践创新能力。 1、判断唯一可译码 利用尾随后缀法判断任意输入的码是否为唯一可译码,即设计一个程序实现判断输入码组是否为唯一可译码这一功能。 2、香农编码 熟悉运用香农编码,并能通过C语言进行编程,对任意输入消息概率,利用香农编码方法进行编码,并计算信源熵和编码效率。 二、设计思路 1、判断唯一可译码 在我们学习使用了克劳夫特不等式之后,知道唯一可译码必须满足克劳夫特不等式。但是克劳夫特不等式仅仅是存在性的判定定理,即该定理不能作为判断一种码是否为唯一可译码的依据。也就是说当码字长度和码符号数满足克劳夫特不等式时,则必可以构造出唯一可译码,否则不能构造出唯一可译码。因此我们必须找到一种能够判断一种码是否为唯一可译码的方法,尾随后缀法。 尾随后缀法算法描述: 设C为码字集合,按以下步骤构造此码的尾随后缀集合F: (1) 考查C中所有的码字,若Wi是Wj的前缀,则将相应的后缀作为一个尾随后缀放入集合F0中; (2) 考查C和Fi两个集合,若Wj∈C是Wi∈Fi的前缀或Wi∈Fi 是Wj

信息论与编码课程论文

《信息论与编码》课程论文 ——通过信息论对已有知识产生的新认识 马赛 1143031014 《信息论与编码》课程是通信专业的一门基础课。其讲述的理论——香农信息论是当今信息科学的基础,可以说没有信息论的理论支持,就没有当今的信息化社会。 通过对于信息论的学习,我认识到,信息论的贡献就是解释了什么是“信息”,同时使用数学工具,对信息及伴随它产生的各种事物概念进行了解析。近代科学的重大飞跃往往都是因人类对于一个事物有了强有力的分析工具而产生的。有了信息论这一近乎完备(存在一些缺陷)的解析理论,人类才得以驾驭信息,社会才有了长足的进步。 在学习时,我习惯于把正在学习的知识和自己已经掌握的知识进行联系。通过这种方法,可以增进对正在学习知识的理解,同时对已掌握的知识也有新的认识。下文中,列举了两个问题,同时使用信息论的角度去进行解释。 一、计算机的存储容量与信息量的联系 当今的计算机已经十分普及。存储容量,无论内存还是外存,都是判定一台计算机性能的重要指标。现在的个人计算机硬盘容量已经达到了TB级别,而在20年前,几百MB的硬盘都十分罕见。在追求更高的存储容量时,我们是否思考过存储的东西是什么?KB、MB、GB等单位究竟代表的含义是什么? 这是计算机科学的基本知识:“8 bit = 1 byte”。bit即“位”,这是计算机存储单元最基本的单位;而信息论中也将信息量——用于衡量信息的量的单位称为bit,这两个概念有什么联系吗? 在课程讲解时提到过这个问题,幻灯片上的答案如是解释:两者代表着不同的概念,信息论中的bit代表着信息量;而计算机中的bit代表着计算机中的二元数字1和0。 我认为两者是同一种概念,都代表信息量,而计算机中的bit是更为细化的概念,单指计算机中的信息量。信息的一种解释是:对于不确定性的消除。信息量是对信息的一种衡量手段,描述对事件不确定性消除的程度。而描述事件不确定性的量就是这个事件发生的概率,因此一个事件发生的概率与事件包含的信息量具有对应的关系。这是香农信息论对于信息量的定义。 计算机存储的依然是信息,只是信息的存储形式是01二进制数字。如果说计算机中的bit只是二元数字的话,那么这个单位就丧失了“信息”这个定义了。 用户通过互联网下载各种资料,下载的资料需要占用本地的存储空间,这是一个众所周知的例子。其实这个过程就是一个消除不确定性的过程。我们一般常识中的“空”硬盘,实际上是没有存储信息,而空间就在那里,空间中的信息有不确定,有不确定度;写入信息,实际上就是在消除不确定性,让空间中的信息确定,让其有序。这就是一种典型的信息传递过程。 计算机是2元存储结构,一个二进制符号代表1bit,根据实际计算,一个二进制符号的最大信息量即H0(X) = log22 = 1bit,这是一个将符号等同于无记忆的,每个符号之间没有联系,达到了信息量的最大值。这是最为简化的处理结果,也是最为可行的处理结果。如果严格按照信息论的角度去分析,其实每个符号之间是有联系的——各种编码、指令,如果01只是随机出现,那么只是一盘散沙。当然这是严格的理论解释,如果实际应用到存储信息的计量,那么将是不可行,计算机界的先驱是非常有远见的。 二、关于称硬币问题的思考

哈夫曼编解码 完整c程序代码

1)内容: 利用 Huffman 编码进行通信可以大大提高信道的利用率,缩短信息传输时间,降低 传输成本。但是,这要求在发送端通过一个编码系统对待传数据进行预先编码,在 接收端进行解码。对于双工信道(即可以双向传输信息的信道),每端都需要一个 完整的编/解码系统。 2)要求: 一个完整的huffman编解码系统应该具有以下功能: 初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建 立Huffman 树,并将它存入hfmTree 中。 编码(Encoding)。利用已经建好的Huffman树(如果不在内存,则应从文件hfmTree 中读取),对文件ToBeTran中的正文进行编码,然后将结果存入文件hfmTree中读取),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。 解码(Decoding)。利用已经建立好的Huffman树将文件CodeFile中的代码进行解码, 结果存入TextFile中。 打印代码文件(Print)。将文件CodeFile以紧凑的格式显示在终端上,每行 50 个 代码。同时将此字符形式的编码文件写入文件CodePrint中。 打印Huffman树(Tree Printing)。将已经在内存中的Huffman树以直观的形式(树或者凹入的形式)显示在终端上,同时将此字符形式的Huffman 树写入文件TreePrint中。 3) 测试数据: 用下表给出的字符集和频度的实际统计数据建立Huffman树,并对以下报文进行编码和译码:“THIS PROGRAM IS MY FAVORITE”。 完整代码如下: #include #include #include #define N 100 int *w; char *c,stack[N],code[N][N]; int s1,s2; typedef struct HuffmanTree { int weight; int parent; int lchild; int rchild; }HuffmanTree,*Huff; void menu(void); void Select(struct HuffmanTree HT[],int i);

信息论与编码期中试卷及答案

信息论与编码期中试题答案 一、(10’)填空题 (1)1948年,美国数学家香农发表了题为“通信的数学理论”的长篇论文,从而创立了信息论。 (2)必然事件的自信息是0 。 (3)离散平稳无记忆信源X的N次扩展信源的熵等于离散信源X的熵的N倍。 (4)对于离散无记忆信源,当信源熵有最大值时,满足条件为__信源符号等概分布_。 (5)若一离散无记忆信源的信源熵H(X)等于2.5,对信源进行等长的无失真二进制编码,则编码长度至少为 3 。 二、(10?)判断题 (1)信息就是一种消息。(? ) (2)信息论研究的主要问题是在通信系统设计中如何实现信息传输、存储和处理的有效性和可靠性。(? ) (3)概率大的事件自信息量大。(? ) (4)互信息量可正、可负亦可为零。(? ) (5)信源剩余度用来衡量信源的相关性程度,信源剩余度大说明信源符号间的依赖关系较小。 (? ) (6)对于固定的信源分布,平均互信息量是信道传递概率的下凸函数。(? ) (7)非奇异码一定是唯一可译码,唯一可译码不一定是非奇异码。(? ) (8)信源变长编码的核心问题是寻找紧致码(或最佳码)。 (? ) (9)信息率失真函数R(D)是关于平均失真度D的上凸函数. ( ? ) 三、(10?)居住在某地区的女孩中有25%是大学生,在女大学生中有75%是身高1.6米以上的,而女孩中身高1.6米以上的占总数的一半。 假如我们得知“身高1.6米以上的某女孩是大学生”的消息,问获得多少信息量? 解:设A表示“大学生”这一事件,B表示“身高1.60以上”这一事件,则 P(A)=0.25 p(B)=0.5 p(B|A)=0.75 (5分) 故p(A|B)=p(AB)/p(B)=p(A)p(B|A)/p(B)=0.75*0.25/0.5=0.375 (4分) I(A|B)=-log0.375=1.42bit (1分)

哈夫曼编译码器课程设计报告完整版

哈夫曼编译码器课程设计报告完整版

XXX学院本科 数据结构课程设计总结报告 设计题目:实验一、哈夫曼编/译码器 学生姓名:XXX 系别:XXX 专业:XXX 班级:XXX 学号:XXX 指导教师:XXX XXX 6 月 21日

xxx学院 课程设计任务书 题目一、赫夫曼编译码器 专业、班级 xxx 学号 xxx 姓名 xxx 主要内容、基本要求、主要参考资料等: 1. 主要内容 利用哈夫曼编码进行信息通信可大大提高信道利用率,缩短信息传输时间,降低传输成本。要求在发送端经过一个编码系统对待传数据预先编码;在接收端将传来的数据进行译码(复原)。对于双工信道(既能够双向传输信息的信道),每端都需要一个完整的编/译码系统。试为这样的信息收发站写一个哈夫曼的编/译码系统。 2. 基本要求 系统应具有以下功能: (1)C:编码(Coding)。对文件tobetrans中的正文进行编码,然后将结果存入文件codefile中,将以此建好的哈夫曼树存入文件HuffmanTree中 (2)D:解码(Decoding)。利用已建好的哈夫曼树将文件codefile中的代码进行译码,结果存入textfile中。 (3)P:打印代码文件(Print)。将文件codefile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入

文件codeprint中。 (4)T:打印哈夫曼树(Tree Printing)。将已在内存中的哈夫曼树以直观的方式(树或凹入表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件treeprint中。 3. 参考资料:数据结构(C语言版)严蔚敏、吴伟民编著; 数据结构标准教程胡超、闫宝玉编著 完成期限: 6月21 日 指导教师签名: 课程负责人签名: 6月 21 日 一、设计题目(任选其一) 实验一、哈夫曼编/译码器 二、实验目的 1巩固和加深对数据结构的理解,提高综合运用本课程所学知识的能力; 2 深化对算法课程中基本概念、理论和方法的理解; 3 巩固构造赫夫曼树的算法; 4 设计试验用程序实验赫夫曼树的构造。 三、运行环境(软、硬件环境) Windows xp sp3,Visual C++ 6.0英文版

信息论与编码试题集与答案

一填空题(本题20分,每小题2分) 1、平均自信息为 表示信源的平均不确定度,也表示平均每个信源消息所提供的信息量。 平均互信息 表示从Y获得的关于每个X的平均信息量,也表示发X前后Y的平均不确定性减少的量,还表示通信前后整个系统不确定性减少的量。 2、最大离散熵定理为:离散无记忆信源,等概率分布时熵最大。 3、最大熵值为。 4、通信系统模型如下: 5、香农公式为为保证足够大的信道容量,可采用(1)用频带换信噪比;(2)用信噪比换频带。 6、只要,当N足够长时,一定存在一种无失真编码。 7、当R<C时,只要码长足够长,一定能找到一种编码方法和译码规则,使译码错误概率无穷小。 8、在认识论层次上研究信息的时候,必须同时考虑到形式、含义和效用三个方面的因素。 9、1948年,美国数学家香农发表了题为“通信的数学理论”的长篇论文,从而创立了信息论。 按照信息的性质,可以把信息分成语法信息、语义信息和语用信息。 按照信息的地位,可以把信息分成客观信息和主观信息。 人们研究信息论的目的是为了高效、可靠、安全地交换和利用各种各样的信息。 信息的可度量性是建立信息论的基础。 统计度量是信息度量最常用的方法。 熵是香农信息论最基本最重要的概念。 事物的不确定度是用时间统计发生概率的对数来描述的。 10、单符号离散信源一般用随机变量描述,而多符号离散信源一般用随机矢量描述。 11、一个随机事件发生某一结果后所带来的信息量称为自信息量,定义为其发生概率对数的负值。 12、自信息量的单位一般有比特、奈特和哈特。 13、必然事件的自信息是 0 。 14、不可能事件的自信息量是∞。 15、两个相互独立的随机变量的联合自信息量等于两个自信息量之和。 16、数据处理定理:当消息经过多级处理后,随着处理器数目的增多,输入消息与输出消息之间的平均互信息量趋于变小。 17、离散平稳无记忆信源X的N次扩展信源的熵等于离散信源X的熵的 N倍。 18、离散平稳有记忆信源的极限熵,。 19、对于n元m阶马尔可夫信源,其状态空间共有 nm 个不同的状态。 20、一维连续随即变量X在[a,b]区间内均匀分布时,其信源熵为 log2(b-a)。

信息论与编码课程设计报告,统计信源熵与香农编码

信息论与编码课程设计报告设计题目:统计信源熵与香农编码 专业班级电信 12-06 学号 学生姓名 指导教师 教师评分 2015年 3 月 30日

目录 一、设计任务与要求 (2) 二、设计思路 (2) 三、设计流程图 (3) 四、程序运行及结果 (4) 五、心得体会 (6) 参考文献 (7) 附录:源程序 (8)

一、设计任务与要求 1.统计信源熵 要求:统计任意文本文件中各字符(不区分大小写)数量,计算字符概率,并计算信源熵。 2.香农编码 要求:任意输入消息概率,利用香农编码方法进行编码,并计算信源熵和编码效率。 二、设计思路 本次课程设计中主要运用C 语言编程以实现任务要求,分析所需要的统计量以及相关变量,依据具体公式和计算步骤编写语句,组成完整C 程序。 1、信源熵 定义:信源各个离散消息的自信息量的数学期望为信源的平均信息量,一般称为信源的信息熵,也叫信源熵或香农熵,有时称为无条件熵或熵函数,简称熵,记为H ()。 计算公式: ) (log )(-)x (i i i x p x p H ∑= 2、香农编码过程: (1)将信源消息符号按其出现的概率大小依次排列为 n p p ≥???≥≥21p (2)确定满足下列不等式的整数码长i K 为 1)()(+-<≤-i i i p lb K p lb (3)为了编成唯一可译码,计算第i 个消息的累加概率 ∑-==11) (i k k i a p P (4)将累计概率 i P 变换成二进制数。 (5)取i P 二进制数的小数点后i K 位即为该消息符号的二进制码字。

三、设计流程图 1、统计信源熵 开始 读取给定文件 判断文件是否打开否 并且不为空 是 统计文本字符,直关闭文件 至文本字符读完。 统计同一字符(不分 大小写)出现的次数 计算字符概率 计算信源熵 输出 结束

哈夫曼编码与译码报告

一、设计思想 程序要求: 利用哈夫曼树对字符串进行编码,要求每个字符有自己唯一的编码。将得到的一串字串译成0、1编码后存到一个文件夹中,然后再从这个文件夹中读出这串编码进行解码。 实现方法: 输入一串字符,要求字符的区间为大写的26个英文字母,将获得的串字符用计算权值的函数(jsquanzhi())进行字符统计,统计出现的字符种数以及每种字符出现的次数,将该种字符出现的次数作为它的权值。将出现的字符的权值和该字符依次分别赋给两个结构体HT和HC,利用HT(节点)权值的大小建立哈夫曼树,首先用选择函数select()函数选择两个权值最小的字符作为叶子节点,创建一个新的节点作为这两个叶节点的父节点,被选中的节点给他的HT[i].parent赋值是他下次不再被选中,父节点的权值为,子节点的权值之和。然后将该将父节点放入筛选区中,再进行选择(被选过的不再被使用),直到所有的节点都被使用,这样一个哈夫曼树就被建立了。根据每个字符在哈夫曼书中的位置来编译每个字符的0、1密文代码,从叶节点判断该叶节点是其父节点的左右字左字为‘0’,右子为‘1’,在判断父节点是上级父节点的左右子直至根节点,将生成的0、1字符串按所表示的字符倒序存入HC相应的字符的bins[]数组。 重新一个一个字符的读取输入的字符串,按照字符出现的顺序将它转为0、1代码并存到一个txt文件夹中去。解码时从文件夹中,一个一个字符的读出那串0、1代码赋给一个临时字符串cd[],用该字符串与每个字符的HC[i].bins密文比较,直到与一个字符的密文相同时,译出该字符,将字符存放在临时字符数组tempstr[]中,清空临时字符串继续读取0、1代码进行翻译,直至文件密文结束为止。于是就得到了原先被加密的那串字符串。

信息论与编码(第二版)曹雪虹(最全版本)答案

《信息论与编码(第二版)》曹雪虹答案 第二章 2.1一个马尔可夫信源有3个符号{}1,23,u u u ,转移概率为:()11|1/2p u u =,()21|1/2p u u =, ()31|0p u u =,()12|1/3p u u =,()22|0p u u =,()32|2/3p u u =,()13|1/3p u u =,()23|2/3p u u =,()33|0p u u =,画出状态图并求出各符号稳态概率。 解:状态图如下 状态转移矩阵为: 1/21/2 01/302/31/32/30p ?? ?= ? ??? 设状态u 1,u 2,u 3稳定后的概率分别为W 1,W 2、W 3 由1231WP W W W W =??++=?得1231132231231 112331223231W W W W W W W W W W W W ?++=???+=???=???++=? 计算可得1231025925625W W W ?=??? =? ? ?=?? 2.2 由符号集{0,1}组成的二阶马尔可夫链,其转移概率为:(0|00)p =0.8,(0|11)p =0.2, (1|00)p =0.2,(1|11)p =0.8,(0|01)p =0.5,(0|10)p =0.5,(1|01)p =0.5,(1|10)p =0.5。画出 状态图,并计算各状态的稳态概率。 解:(0|00)(00|00)0.8p p == (0|01)(10|01)0.5p p == (0|11)(10|11)0.2p p == (0|10)(00|10)0.5p p == (1|00)(01|00)0.2p p == (1|01)(11|01)0.5p p == (1|11)(11|11)0.8p p == (1|10)(01|10)0.5p p ==

信息论与编码课程大作业二进制哈夫曼编码

信息论与编码课程大作业 题目:二进制哈夫曼编码 学生姓名: 学号:2010020200 专业班级: 2010级电子信息班 2013年5月18日

二进制哈夫曼编码 1、二进制哈夫曼编码的原理及步骤 1、1信源编码的计算 设有N 个码元组成的离散、无记忆符号集,其中每个符号由一个二进制码字表示,信源符号个数n 、信源的概率分布P={p(s i )},i=1,…..,n 。且各符号xi 的以li 个码元编码,在变长字编码时每个符号的平均码长为∑==n i li xi p L 1)( ; 信源熵为:)(log )()(1 xi p xi p X H n i ∑=-= ; 唯一可译码的充要条件:11 ≤∑=-n i Ki m ; 其中m 为码符号个数,n 为信源符号个数,Ki 为各码字长度。 构造哈夫曼数示例如下图所示。 1、2 二元霍夫曼编码规则 (1)将信源符号依出现概率递减顺序排序。 (2)给两个概率最小的信源符号各分配一个码位“0”和“1”,将两个信源符号合并成一个新符号,并用这两个最小的概率之和作为新符号的概率,结 0.60 0.15 0.09 0.30 1.00 0.60 0.03 0.30 0.15 0.40 0.05 0.04 0.03

果得到一个只包含(n-1)个信源符号的新信源。称为信源的第一次缩减信源,用s1 表示。 (3)将缩减信源 s1 的符号仍按概率从大到小顺序排列,重复步骤(2),得到只含(n-2)个符号的缩减信源s2。 (4)重复上述步骤,直至缩减信源只剩两个符号为止,此时所剩两个符号 的概率之和必为 1,然后从最后一级缩减信源开始,依编码路径向前返回,就得到各信源符号所对应的码字。 1、3 二元哈夫曼编码流程图如下图所示。 是 是 开始 等待数据输入 判断输入的概 率是否小于零 判断概率和是 否大于1 生成一个n - 1行n 列的数组 按照哈弗曼的编码规则进行编 码 计算码长 计算编码效率 计算信源熵 显示结果 结束

相关文档
最新文档