哈夫曼编码译码器课程设计(4)

2019-03-16 16:00

3.2程序介绍

本程序的编码和运行都是在Visual C++ 6.0中实现的,在Visual Stdio中也能实现, 整个程序虽然看似庞大,但编写过程清晰,采用模块化编写,各个问题逐个击破,也方便对程序的管理和运行。整个程序的编写分为五大部分,五大部分紧密相连,环环相扣,共同实现程序的编码。

在上述存储结构上实现的哈夫曼算法可大致描述为(设T的类型为HuffmanTree):

(1)初始化

将T[0..m-1]中2n-1个结点里的三个指针均置为空(即置为-1),权值置为0。 (2)输入

读入n个叶子的权值存于向量的前n个分量(即T[0..n-1])中。它们是初始森林中n个孤立的根结点上的权值。 (3)合并

对森林中的树共进行n-1次合并,所产生的新结点依次放人向量T的第i个分量中(n≤i≤m-1)。每次合并分两步:

①在当前森林T[0..i-1]的所有结点中,选取权最小和次小的两个根结点[p1]和T[p2]作为合并对象,这里0≤p1,p2≤i-1。

② 将根为T[p1]和T[p2]的两棵树作为左右子树合并为一棵新的树,新树的根是新结点T[i]。具体操作:

将T[p1]和T[p2]的parent置为i,

将T[i]的lchild和rchild分别置为p1和p2 新结点T[i]的权值置为T[p1]和T[p2]的权值之和。 注意:

11

合并后T[pl]和T[p2]在当前森林中已不再是根,因为它们的双亲指针均已指向了T[i],所以下一次合并时不会被选中为合并对象。

3.3程序流程图以及说明

主程序

说明

开始 定义全局数组 a, b, c ,d 定义全局变量 定义变量 n, x, y, K, 数组 a 一维,存放输入概率 数组 b,二维存放编码过程概率 数组 c,三维,存放编码每个位置即时编码; 数组 d,一维存放码长 i 为整型变量 计数编码次数 m 为整型 n, x 为控制循环整型变量, y 为检错控制整型变量, K 为存放平均码长浮点型变量, H 为存放信源熵浮点型变量, 三重循环初始化,使其所有值为 2 初始 显示“请输入消息个数”,响蜂鸣器 输出提示 获取 N y=xiaoxi() Y ordination(m,a); 输出编码过程中产生的新概率 调用获取概率函数,将返回值给 y Y=0 存在错误,结束程序 调用获取概率函数,将返回值给 y 输出码字 输出平均码长、 信源熵,编码效率,冗余度 结束

图3 主程序流程图

12

4. 结果与结论

4.1程序运行结果

为了最大化优化程序,尽可能美观,设计了五个输入选择步骤,可多次进行选择输入输出操作,输入时可从键盘键入或者从文件指定路径获取。

printf(\哈夫曼编译器 ******\\n\printf(\初始化哈夫曼表\\n\

13

printf(\输入编码内容\\n\printf(\开始编码\\n\printf(\开始译码\\n\printf(\与译码与原码比较\\n\printf(\退出哈夫曼编译器\\n\

printf(\请输入以'#'结束的大写字母字符串:\\n\while(strcmp(word,\{

fputs(word,fp); gets(word); }

fclose(fp); }

根据编写的程序,通过while循环,在输入#时程序输入结束,即可进行译码,并将译码内容,通过程序存放在C盘中。

14

译码内容存放在指定位置,找到打开即可见。

最后可审核源码译码是否相符,退出哈夫曼编译器。

15


哈夫曼编码译码器课程设计(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:2014复旦大学行政学考研真题与答案解析

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: