信息论和编码课程设计汇本报告_第1页
信息论和编码课程设计汇本报告_第2页
信息论和编码课程设计汇本报告_第3页
免费预览已结束,剩余6页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、目录一:实验原理 1二:程序源代码1三:实验分析6四:实验结论7赫夫曼编码二实验原理哈夫曼编码的具体步骤归纳如下: 概率统计如对一幅图像,或m幅同种类型图像作灰度信号统计, 得到n个不同概率的信息符号。 将n个信源信息符号的n个概率,按概率大小排序。 将n个概率中,最后两个小概率相加,这时概率个数减为n-1个。 将n-1个概率,按大小重新排序。 重复,将新排序后的最后两个小概率再相加, 相加和与其余概率 再排序。 如此反复重复n-2次,得到只剩两个概率序列。 以二进制码元(0.1)赋值,构成哈夫曼码字。编码完毕。哈夫曼码字长度和信息符号出现概率大小次序正好相反,即大概信息 符号分配码字长度短,

2、小概率信息符号分配码字长度长。C、哈夫曼编码的特点(1) 哈夫曼编码的构造顺序明确,但码不是唯一的 (因以大赋1还是小的赋1而异;(2) 哈夫曼编码的字长参差不齐,硬件实现不方便;(3) 只有在概率分布很不均匀时,哈夫曼编码才有显著的效果,而在信 源分布均匀时,一般不使用哈夫曼编码。1:程序源代码:#defi ne MAXVALUE 10000#defi ne MAXLEAF 30#defi ne MAXNODE 59#defi ne MAXBIT 10#define LENTH 30#include "stdio.h"#in clude<iostream>ty

3、pedef structfloat gailv;int flag;int pare nt;int lchild;int rchild;char ch;int t;HNodeType;typedef structint bitMAXBIT;int start;HCodeType;typedef structfloat gailv;char letter;mytype; /*it's the type of data save in file*/ typedef struct filehuffint count;mytype mydataMAXLEAF; filehuff()cou nt=

4、0; ;filehuff filedata;char codeMAXVALUE;HNodeType HuffNodeMAXNODE;void savetofile()FILE *fp;if(fp=fope n("datafile.txt","wb")=NULL)printf("翻开失败.");return;if(fwrite(&filedata,sizeof(filedata),1,fp)!=1)printf("写入文件失败.");fclose(fp);void ope nfile() FILE *fp;i

5、f(fp=fope n("datafile.txt","rb")=NULL)return;fread(&filedata,sizeof(filedata),1,fp);void tran slate()char c;int i,j,k=0,m, n=0;printf("请输入你想要译码的二进制序列");prin tf("n");getchar();sca nf("%c",&c);for(i=0;(i<MAXVALUE )&&( c='1'|c

6、='0');i+) codei=c;sca nf("%c",&c);printf("对应的信源符号为:");for(j=0;j<=MAXVALUE&&HuffNodej.pare nt!=-1;j+) m=j+1;for(j=0,k=m;j<=i;j+)if(codej='0')n=HuffNodek.lchild;if(n=-1)prin tf("%c",HuffNodek.ch);k=m;j-;co nti nue;k=n;elsen=HuffNodek.rchi

7、ld;if(n=-1)prin tf("%c",HuffNodek.ch); k=m;j-;co nti nue;k=n;void Huffma n()HCodeType HuffCodeMAXLEAF,cd;int i,j,m1,m2,x1,x2,c,p,m;if(filedata.co un t=0) printf("n输入信源符号总数:");sca nf("%d",&m);filedata.co un t=m;for(i=0;i<2*m-1;i+) HuffNodei.gailv=0;HuffNodei.pare

8、nt=-1;HuffNodei.flag=0;HuffNodei.lchild=-1;HuffNodei.rchild=-1;HuffNodei.ch='a'for(i=0;i<m;i+) printf("请输入(概率,信源符号):");sca nf("%f %c",&HuffNodei.gailv,&HuffNodei.ch);filedata.mydatai.gailv=HuffNodei.gailv; filedata.mydatai.letter=HuffNodei.ch; savetofile();else

9、 m=filedata.co unt;for(i=0;i<2*m-1;i+) HuffNodei.gailv=0;HuffNodei.pare nt=-1;HuffNodei.flag=0;HuffNodei.lchild=-1;HuffNodei.rchild=-1;HuffNodei.ch=3;for(i=0;i<m;i+) HuffNodei.gailv=filedata.mydatai.gailv;HuffNodei.ch=filedata.mydatai.letter;for(i=0;i<m-1;i+) m1=m2=MAXVALUE;x仁 x2=0;for(j=0;

10、j<m+i;j+) if(HuffNodej.gailv<m1 &&HuffNodej.flag=0) m2=m1;x2=x1;m仁 HuffNodej.gailv;x1=j;else if(HuffNodej.gailv<m2&&HuffNodej.flag=0) m2=HuffNodej.gailv;x2=j;HuffNodex1.pare nt=m+i;HuffNodex2.pare nt=m+i;HuffNodex1.flag=1;HuffNodex2.flag=1;HuffNodem+i.gailv=HuffNodex1.gailv+

11、HuffNodex2.gailv;HuffNodem+i.lchild=x1;HuffNodem+i.rchild=x2; for(i=0;i<m;i+) cd.start=m-1;c=i;p=HuffNodec.pare nt;while(p!=-1) if(HuffNodep.lchild=c)cd.bitcd.start=0;else cd.bitcd.start=1;cd.start-;c=p;p=HuffNodec.pare nt;for(j=cd.start+1;j<m;j+)HuffCodei.bitj=cd.bitj;HuffCodei.start=cd.start

12、; printf("对应的赫夫曼编码如下: printf("n信源符号 for(i=0;i<m;i+)prin tf("%c概率%fII);编码n");”,HuffNodei.ch,HuffNodei.gailv);for(j=HuffCodei.start+1;j<m;j+) prin tf("%d",HuffCodei.bitj);prin tf("n");printf("按任意键继续n");mai n()char yn;prin tf("n");prin t

13、f("n");printf(”信息论与编码实验n");ope nfile();Huffma n();for(;)printf("n是否想要把序列译码为信源符号?:(输入y or n)");sea nf("%c", &yn);if(y n='y'|y n='Y')tran slate();elsebreak;return 0;system("pause");三:实验分析编码实例如下:由图中可以看出,符合根本的赫夫曼编码的原理,概率大的用短码,概率小的用长码。信畠论与编

14、鱼实验F-A, i-i4任童犍继续,!= *立r-电0.1500008.2606000.300000編码11011100H110辰否想要把序列译码为信源符号?: £端入选择译码:结果如下:是否想斜巴匡列译码为信猱符号?: t输入y or n) y 请输入裱担要译科的二进制序列对应旳信源符弓为;eddcedcee是否想妥把序列译码为信源符号?=瞒入y “ n四:实验结论哈夫曼的具体实现,在数据构造的相关课程曾做相应的实验, 所 以无论在理解上或是实现上,都不是很困难,程序上实现哈夫曼的编 码与译码,由于哈夫曼自身的特点,编码与译码均不是唯一,但是一 样的编译码规那么还是能实现正确的译码的。 本实验,除了实现编译 码的具体实现,还实现数据的存储与读取,这给实验实现方便,不必 每次从命令提示符输入数据。总的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论