欢迎来到天天文库
浏览记录
ID:59368917
大小:38.00 KB
页数:2页
时间:2020-09-04
《游程编码实验报告.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、实验二游程编码一、实验目的1、掌握游程编码原理;2、理解数据编码压缩和译码输出编码的实现。二、实验要求实现游程编码和译码的生成算法。三、实验内容输入一幅二值图像,先统计要压缩编码的文件中的字符字母出现的次数,按字符字母和空格出现的概率对其进行哈夫曼编码,然后读入要编码的文件,编码后存入另一个文件;接着再调出编码后的文件,并对其进行译码输出,最后存入另一个文件中。四、实验原理1、哈夫曼树的定义:假设有n个权值,试构造一颗有n个叶子节点的二叉树,每个叶子带权值为wi,其中树带权路径最小的二叉树成为哈夫曼树或者最优二叉树;2、哈夫曼树的构造
2、:weight为输入的频率数组,把其中的值赋给依次建立的HTNode对象中的data属性,即每一个HTNode对应一个输入的频率。然后根据data属性按从小到大顺序排序,每次从data取出两个最小和此次小的HTNode,将他们的data相加,构造出新的HTNode作为他们的父节点,指针parent,leftchild,rightchild赋相应值。在把这个新的节点插入最小堆。按此步骤可以构造构造出一棵哈夫曼树。 通过已经构造出的哈夫曼树,自底向上,由频率节点开始向上寻找parent,直到parent为树的顶点为止。这样,根据每次向上
3、搜索后,原节点为父节点的左孩子还是右孩子,来记录1或0,这样,每个频率都会有一个01编码与之唯一对应,并且任何编码没有前部分是同其他完整编码一样的。五、实验程序#include#include#defineNUM1000main(){inti,j,x,z,cnt=1,k=0,h=0,a[NUM];chardat,flag,str[NUM],b[NUM];printf("(请输入待编码的字符串)");printf("原字符串为:");gets(str);//输入待编码的字符串flag=str
4、[0];//记下第一个字符值作为flag游程编码的起始值/************************编码部分**********************************************/printf("游程编码为:");for(i=0;i5、数数组cnt=1;//使计数cnt归1}}/************************译码部分**********************************************/printf("译码结果为:");for(j=0;j6、从0和1切换赋值}for(x=0;x
5、数数组cnt=1;//使计数cnt归1}}/************************译码部分**********************************************/printf("译码结果为:");for(j=0;j6、从0和1切换赋值}for(x=0;x
6、从0和1切换赋值}for(x=0;x
此文档下载收益归作者所有