- 1、本文档共9页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
河北工业大学
《数据结构》课程实验
实 验 报 告
题目:基于哈夫曼编码的通信系统的设计与实现
专业:计算机科学与技术
班级:计1301班
姓名:张路浩 刘禄源 刘磊波 李浩川 邹博睿 王超
完成日期: 2015-1-13
一、试验内容
1)初始化处理:建立通信系统
(1)建立有100句中文的信息集合,每个句子称为一条信息。
(2)输入编码参数:
① 从终端输入编码字符集大小n,字符编码长度m(设n为4,m为8);
② 从终端输入编码字符(设为A,B,C,D);
(3)生成每条信息的字符编码,构造字符编码集合;
(4)计算每个字符在字符编码集合中出现的概率;
(5)根据字符概率构造哈夫曼树,求出每个字符的二进制编码。
2)发送端信息编码
(1)用户从信息集合中选择一条信息,找到该信息对应的字符编码;
(2)根据该信息的字符编码,哈夫曼树求出的每个字符的二进制编码,构造出该信息的二进制编码,记录该二进制编码。(由于是软件模拟,没有发送设备,发送端的编码工作完成)。
3)接受端信息译码
(1)根据得到的信息的二进制编码,利用哈夫曼树求出的每个字符的二进制编码,还原出信息的字符编码;
(2)根据信息的字符编码,找到对应的信息。
5、实现提示
(1)本试验涉及到通讯学科的编码理论和信息学科的数据压缩技术。
(2)根据参数生成的通信系统的所有信息的有效存储问题。
(3)信息字符编码可参考随机数的方式生成,且要求保持唯一性
二、试验目的
(1)掌握二叉树的存储结构及其相关操作。
(2)掌握构造哈夫曼树的基本思想,及其编码/译码过程。
三、流程图
开始定义汉字信息string
开始
定义汉字信息
string message[10]
通过随机数函数对汉字信息用字符集进行编码psw[
通过随机数函数对汉字信息用字符集进行编码psw[i]
设置随机数种子
srand(time(NULL));
定义字符集大小n
输入字符集内容HT.HFMTree[i
输入字符集内容
HT.HFMTree[i].word
输入n
统计汉字信息字符编码中各字符出现的频度
统计汉字信息字符编码中各字符出现的频度HT.HFMTree[k].weight
用字符集对信息进行字符编码
用字符集对信息进行字符编码void CreatCode(HCodeType HT,int n)
输入编码长度p
输入编码长度p
i
i2n-1
Y指针初始化HT.HFMTree[i].parent = -1; HT.HFMTree[
Y
指针初始化
HT.HFMTree[i].parent = -1;
HT.HFMTree[i].rchild = -1; HT.HFMTree[i].lchild = -1;
逐个非叶结点构造
根据各字符构的频度构造哈夫曼树
CreatHFMTree(HT,n)
N
N
将各信息的字符编码进行哈弗曼树编码
将各信息的字符编码进行哈弗曼树编码
寻找具有最小、次小值的根建树
哈夫曼编码
CreatHFMCode(HT,HFMCode,n);
链接父节点和兄弟结点,i
链接父节点和兄弟结点,i++
父指针为空
父指针为空
Y输出文字信息和对应的哈夫曼编码
Y
输出文字信息和对应的哈夫曼编码
Y原来的最小变为次小,记下新的最小值比原来最小的还要小
Y
原来的最小变为次小,记下新的最小值
比原来最小的还要小
记下新的次小值比原来的
记下新的次小值
比原来的次小还小
N
结束
四、源程序代码
#includeiostream
#includecstdlib
#includectime
#includestring
using namespace std;
const int n=4;//叶子节点个数
const int MAXVALUE = 9999;
int m,p; //编码参数
string l;
int size;
//构造哈夫曼树结点
typedef struct{
int weight;//权值
int parent;//父节点
int lchild;//左子树
int rchild;//右子树
char word;//编码字符
}HNodeType;
//构造哈夫曼编码数组
typedef struct{
HNodeType HFMTree[2*n-1];//结点数
int bit[n];
int start;
}HCodeType;
HCodeType HT;
HCodeType HFM
文档评论(0)