1.4应解决的主要问题
一个完整的哈夫曼码的编译码系统应具有以下功能:
ⅰ:I: 初始化(Initialization)。从终端读入字符集大小n,几个字符和n个权值,建立哈夫曼树。
ⅱ:C: 编码(Coding)。利用已建好的哈夫曼树,对输入的字符进行编码,然后将结果存入文件codefile中。
ⅲ:D: 译码(Decoding)。利用已建好的哈夫曼树将文件codefile中的代码进行译码。
ⅳ:P: 打印代码文件(Print)。将文件codefile以紧凑格式显示在终端上,每行50个代码。
ⅴ:T: 打印哈夫曼树(Tree printing)。将已在内存中的哈夫曼树以直观的方式(比如以表格形式分别显示编译码信息)显示在终端上。
1.5应达到的技术要求Unix和Linux平台下双机热备解决方案
用26个大写字母以及空格权值的实际统计数据建立哈夫曼树,并实现以下报文的编码和译码:“THIS PROJECT IS MY FAVORITE”。
用户界面可以设计为“菜单”方式:先是上述功能符号,再加上:“E”,表示结束运行End,请用户键入一个选择功能符。此功能执行完毕后在显示此菜单,至此某次用户选择了“E”为止。(若实现不了菜单方式,选用控制台方式)
在程序的一次执行过程中,第一次执行I 、D 或C命令之后,哈夫曼树已经在内存了,不必再读入。
第二章 设计简介及设计方案论述
2.1设计简介
在数据通讯中,经常需要将传送的文字转换成由二进制字符0、1组成的二进制串。例如:可以用长为2的二进制编码00,01,10,11分别表示A,B,C,D,这是一种等长编码表示。若在传输中,A,B,C,D出现的频率大体相等时,用等长编码表示好。但当出现的频率相差悬殊时,为了节省二进制数位,以达到提高效率的目的,就要采用非等长的编码。但在非等长编码中可能出现对某个字符集进行编码时出现多义性等问题。如假设a的二进制编码为00,b的二进制编码为01,c的二进制编码为0001,则当信息序列为0001时,译码是ab还是c呢?为解决这种二义性,因此我们利用非等长编码中的前缀编码传递信息。前缀编码使得每个字符的编码都不是其他字符编码的前缀。在进行信息通讯利用前缀编码可以大大提高信道利用率,缩短信息传输时间,降低传输成本。但是,这要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码。
通过构造出一个带权路径长度最小的二叉树即哈夫曼树可以设计出最短二进制前缀编码即哈夫曼编码,达到完成此次课程设计的要求。
利用哈夫曼编码进行通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。要求在发送端通过一个编码系统对待传数据预先编码,在接收端将传来的数据进行译码。系统具有如下的几个功能:接收原始数据、编码、译码、打印编码规则。
2.2设计方案
通过对简单哈夫曼编/译码系统的设计与实现来熟练掌握树型结构在实际问题中的应用,并能熟悉运用。
哈夫曼编码及译码总程序有如下几部分构成:
全局变量叶节点和权重值,结构体哈夫曼树和哈夫曼编码变量;
全局函数creathuftree,creathufcode,codeing, transhufcode,printhuftree,printhufcode分别实现创建哈夫曼树,创建哈夫曼编码,对字符进行二进制编码,把二进制编码翻译成字符,输出哈夫曼树结构和哈夫曼编码结构;
main函数体实现对输出系统的控制,利用switch语句达到在屏幕上选择执行哪一个步骤;
设计方案流程图如下:
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一页