课程设计:哈夫曼编码译码器2

课程设计:哈夫曼编码译码器2

ID:22864480

大小:1010.35 KB

页数:30页

时间:2018-11-01

课程设计:哈夫曼编码译码器2_第1页
课程设计:哈夫曼编码译码器2_第2页
课程设计:哈夫曼编码译码器2_第3页
课程设计:哈夫曼编码译码器2_第4页
课程设计:哈夫曼编码译码器2_第5页
资源描述:

《课程设计:哈夫曼编码译码器2》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、1.课程设计的题目22.组员的分工33.软件开发环境34.概要设计47.调试结果258.心得体会309.参考文南犬301.课程设计的题目哈夫曼树一即最优二义树,带权路径长度最小的二义树,经常应用于数据压缩。在计算机信息处理中,哈弗曼编码在信息论屮应用举例“哈夫曼编码”是一种一致性编码法(乂称“熵编码法”),用于数据的无损耗压缩。这一术语是指使用一张特殊的编码表将源字符(例如某文件中的一个符号)进行编码。这张编码表的特殊之处在于,它是根据每一个源字符出现的估算概率而建立起来的(出现概率高的字符使用较短的编码,反之出现概率低的则使用

2、较长的编码,这便使编码之后的字符串的平均期槊长度降低,从而达到无损压缩数据的目的)。这种方法是由David.A.Huffman发展起来的。例如,在英文巾,e的出现概率很高,而z的出现概率则最低。当利用哈夫曼编码对一篇英文进行压缩时,e极有可能用一个位例对以下亿源进行哈夫««码仿教符兮~概和刪码字HKk,汊10201020.191120480003047001304$010J040011040.0101114哈弗曼编码在信息论中应用举例[2](bit)来表示,而z则可能花去25个位(不是26)。用普通的表示方法吋,每个英文字母均占

3、用一个字节(byte),即8个位。二者相比,e使用了一•般编码的1/8的长度,z则使用了3倍多。若能实现对于英文中各个字母出现概率的较准确的估算,就可以大幅度提高无损压缩的比例1.组员的分工下作进度表时间完成工作完成人周四上午完成需求分析,且从两种思路寻找最好的一种陈亦信,陈永培周四上午设置流程阌陈亦倍,陈永培周叫下午开始编代码陈亦信,陈永培周五上午不断调试,在调试中继续调整思路陈亦信,陈永培周五下午不断改进.完善陈亦倍,陈永培201235020307陈亦信(组长)201235020308陈永培设计并编写核心部分代码;K和队友共

4、同讨论并优化算法;没计哈夫鉍树的算法2、编'与课程没计报告和心得体会;编写课程设计报告和心得3、画算法的程序流程阁;体会;4、测试算法分析与设计5、改进编写课程没计报告和心得6、整理代码并且截图体会2.软件开发环境软件:C语言编程,MicrosoftVisualC++6.0,MicrosoftVisualStudio2008编程工具实现。系统:Windows7旗舰版(64bit)/Windows7旗舰版(32bit)/Windowsxp1.概要设计要完成哈夫曼的编码和解码需要肯先建立哈夫曼树,之后对所杏字符根据权重进行编码,最P

5、再对文件内容进行编码和解码。建立吩夫曼树的思想。首先定义适合哈夫曼树的节点类型,需要定义的有当前节点的字符,当前节点的左子、右子和父亲指针。在建立哈夫玆树之前还需要对出现的字符和权重进行统计和记录,并且定义一个可以筛选出最小权重的函数。初始化树节点之后开始建立哈夫曼树。先在所有可能出现的字符中筛选出当前权軍:最小的两个字符,将这两个字符分别作为新节点的左子和右子建立一个小的二叉树,并将两个字符的权重之和赋位给新节点,将新二叉树放入筛选字符屮,再将筛选过的两个字符从筛选列表屮淘汰掉。依次对列表屮剩卜的字符进行权重最小的筛选,直到根

6、节点(如果编码表共宥N个字符,则2*N-1就为最终根节点)为止,也就是当筛选列表为空的吋候,哈夫曼树即建立完成。对于哈夫曼编码树来说,由于哈夫曼编码是前缀码,所以所有耍编码的字符最终都将是这颗树的叶子节点,而其它节点并没有真正的字符意义。即当哈夫曼编码树建立之后,对树的所有叶子节点进行打印可知道足否宥字符遗漏或多余。建立哈夫曼编码表。建立编码表时要根裾每个出现的字符的权重对建立的哈夫曼树的每个叶子节点进行编码。编码时耍从叶子节点出发向根节点进行逆向编奶。判断如果当前节点为左子则对其编码‘0’,如果当前节点为右子则对其编码‘1’。

7、以此类推进行编码直到根节点为止。此时的编码是逆向的,所以需要将码值逆向存储。依次对毎一个叶了•节点进行编码操作,即可得到当前哈夫曼树的编码表。对于码值的逆向存储可以使用栈结构,先将一个码的每一步编码存入栈,再在一个码结束后岀栈至空。当然也可以定义一个字符型数组,将值从后M前存入数组,再将数组有伉部分粘贴到新的数组中进行存储。本次采用了后者,因为个人汄为为此一步操作建立栈结构不划算,而且前一个设计也已经熟练掌握了栈的方法,此处进行新的尝试会更好。对文件进行编码。首先需要建立一个原始文件,在文件中输入需要编码的内容。之P将文件打开,

8、将其中的内容存储到字符中中以便程序编码调用。开始对崙耍编码的字符进行编码,将字符逐一读取与刚刚建立的编码表中的毎个叶子节点代表的字符进行比较,找出相同的对象,并将当前节点的编码打印到屏蒜,并将编码存入到新建的密码文件当中。对文件进行解码。先打开密码文件,将之前编

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。