
开发哈夫曼编解码器程序。
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
问题描述:利用哈夫曼编码进行信息通信能够显著提升信道利用率,从而缩短信息传输时间并降低传输成本。然而,此种方法的前提是发送端必须通过一个编码系统对要传输的数据进行预先编码,而接收端则需要对接收到的数据进行译码(恢复)。对于双工信道(即支持双向信息的信道),每端都需要独立的完整编/译码系统。请设计一个哈夫曼码编译码系统的原型,以满足这样的信息收发站的需求。基本要求:该系统应具备以下功能:(1)I:初始化(Initialization)。从终端获取字符集大小n以及n个字符和m个权值,构建哈夫曼树并将其存储于文件hfmtree中。 (2)C:编码 (Coding)。利用已构建好的哈夫曼树(若不在内存中,则从文件hfmtree中读取),对文件tobetrans中的正文进行编码,并将结果存储于文件codefile中。 (3)D:解码 (Decoding)。借助已构建好的哈夫曼树对文件codefile中的代码进行译码,并将结果存储于文件textfile中。 (4)P:打印代码文件 (Print)。以紧凑格式将文件codefile的内容显示在终端上,每行包含50个代码。同时,将此字符形式的编码文件写入文件codeprint中。(5)T:打印哈夫曼树 (Tree printing)。以直观的方式(树形或凹入表形式)在终端上展示已存在内存中的哈夫曼树,并将其字符形式的哈夫曼树存储于文件treeprint中。程序设计要求根据题目要求将程序划分为五个模块,并采用菜单方式运行,每次执行完一个模块后返回主菜单。除初始化(I)过程外,在每次执行时都应从磁盘读取相应的数据文件。这是为了确保如果在程序执行过程中未进行初始化(I)操作的情况下,后续操作能够顺利进行;例如,如果程序的工作需要的字符集和权值数据是固定的,那么只需在安装程序时执行一次初始化(I)操作即可。而在后续运行程序时,无论执行哪项操作都可将所需的数据加载到内存中。算法分析 本程序主要采用了以下三个算法:(1)哈夫曼编码 在初始化(I)过程中间需要利用输入的字符和权值建立哈夫曼树并计算出相应的哈夫曼编码。首先将输入的字符和权值存储到结构体数组中建立哈夫曼树,然后将计算得到的哈夫曼编码存储到另一个结构体数组中。(2)串的匹配 在编码(D)的过程中间需要对已经编码过的代码进行译码,可采用循环方式比较代码中的与哈夫曼编码长度相同的串与该哈夫曼编码,若相等则回显并存入文件中。(3)二叉树的遍历 在打印哈夫曼树(T)的过程中,由于哈夫曼树本身也是一棵二叉树,因此需要利用二叉树的先序遍历方式输出该哈夫曼树。[测试数据] 根据实验要求,在tobetrans.dat文件中输入THIS PROGRAM IS MY FAVORITE, 字符集及其频度如下: 字符 A B C D E F G H I J K L M 频度 186 64 23 22 32 103 21 15 47 57 1 5 32 20 字符 N O P Q R S T U V W X Y Z 频度 20 56 19 2 50 51 55 30 10 11 2 21
全部评论 (0)


