信息论与编码-课程设计报告(共8页).doc

上传人:飞****2 文档编号:14025469 上传时间:2022-05-02 格式:DOC 页数:8 大小:44.50KB
返回 下载 相关 举报
信息论与编码-课程设计报告(共8页).doc_第1页
第1页 / 共8页
信息论与编码-课程设计报告(共8页).doc_第2页
第2页 / 共8页
点击查看更多>>
资源描述

《信息论与编码-课程设计报告(共8页).doc》由会员分享,可在线阅读,更多相关《信息论与编码-课程设计报告(共8页).doc(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

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)只有在概率分布很不均匀时,哈夫曼编码才有显著的效果,而在信源分布均匀时,一般不使用哈夫曼编码。二:程序源代码:#define MAXVALUE 10000#define MAXLEAF 30#define MAXNODE 59#define MAXBIT 10#define LENTH 30#include stdio.h#includetypedef struct flo

3、at gailv; int flag; int parent; int lchild; int rchild; char ch; int t; HNodeType;typedef struct int bitMAXBIT; int start; HCodeType;typedef struct float gailv; char letter; mytype; /*its the type of data save in file*/typedef struct filehuff int count; mytype mydataMAXLEAF; filehuff()count=0; ; fil

4、ehuff filedata; char codeMAXVALUE; HNodeType HuffNodeMAXNODE;void savetofile() FILE *fp; if(fp=fopen(datafile.txt,wb)=NULL) printf(打开失败 .); return; if(fwrite(&filedata,sizeof(filedata),1,fp)!=1) printf(写入文件失败 .); fclose(fp);void openfile() FILE *fp; if(fp=fopen(datafile.txt,rb)=NULL) return; fread(&

5、filedata,sizeof(filedata),1,fp);void translate() char c; int i,j,k=0,m,n=0; printf(请输入你想要译码的二进制序列 ); printf(n);getchar(); scanf(%c,&c); for(i=0;(iMAXVALUE)&(c=1|c=0);i+) codei=c; scanf(%c,&c); printf(对应的信源符号为:); for(j=0;j=MAXVALUE&HuffNodej.parent!=-1;j+) m=j+1; for(j=0,k=m;j=i;j+) if(codej=0) n=Huf

6、fNodek.lchild; if(n=-1) printf(%c,HuffNodek.ch); k=m;j-;continue; k=n; else n=HuffNodek.rchild; if(n=-1) printf(%c,HuffNodek.ch); k=m;j-;continue; k=n; void Huffman() HCodeType HuffCodeMAXLEAF,cd; int i,j,m1,m2,x1,x2,c,p,m; if(filedata.count=0) printf(n输入信源符号总数 : ); scanf(%d,&m);filedata.count=m; fo

7、r(i=0;i2*m-1;i+) HuffNodei.gailv=0;HuffNodei.parent=-1;HuffNodei.flag=0;HuffNodei.lchild=-1;HuffNodei.rchild=-1;HuffNodei.ch=a; for(i=0;im;i+) printf(请输入 (概率,信源符号):);scanf(%f %c,&HuffNodei.gailv,&HuffNodei.ch); filedata.mydatai.gailv=HuffNodei.gailv; filedata.mydatai.letter=HuffNodei.ch; savetofile(

8、); else m=filedata.count; for(i=0;i2*m-1;i+) HuffNodei.gailv=0; HuffNodei.parent=-1; HuffNodei.flag=0; HuffNodei.lchild=-1; HuffNodei.rchild=-1; HuffNodei.ch=3; for(i=0;im;i+) HuffNodei.gailv=filedata.mydatai.gailv; HuffNodei.ch=filedata.mydatai.letter; for(i=0;im-1;i+) m1=m2=MAXVALUE; x1=x2=0; for(

9、j=0;jm+i;j+) if(HuffNodej.gailvm1&HuffNodej.flag=0) m2=m1; x2=x1; m1=HuffNodej.gailv; x1=j; else if(HuffNodej.gailvm2&HuffNodej.flag=0) m2=HuffNodej.gailv; x2=j; HuffNodex1.parent=m+i; HuffNodex2.parent=m+i; HuffNodex1.flag=1; HuffNodex2.flag=1; HuffNodem+i.gailv=HuffNodex1.gailv+HuffNodex2.gailv; H

10、uffNodem+i.lchild=x1; HuffNodem+i.rchild=x2; for(i=0;im;i+) cd.start=m-1; c=i; p=HuffNodec.parent; while(p!=-1) if(HuffNodep.lchild=c)cd.bitcd.start=0; else cd.bitcd.start=1; cd.start-; c=p; p=HuffNodec.parent; for(j=cd.start+1;jm;j+)HuffCodei.bitj=cd.bitj; HuffCodei.start=cd.start; printf(对应的赫夫曼编码如

11、下:); printf(n信源符号 概率 编码n); for(i=0;im;i+) printf(%c %f ,HuffNodei.ch,HuffNodei.gailv); for(j=HuffCodei.start+1;jm;j+) printf(%d,HuffCodei.bitj); printf(n); printf(按任意键继续.n); main() char yn;printf(n);printf(n);printf( 信息论与编码实验 n); openfile(); Huffman(); for(;) printf(n是否想要把序列译码为信源符号 ?: (输入 y or n) );

12、 scanf(%c,&yn); if(yn=y|yn=Y) translate(); else break; return 0; system(pause);三:实验分析编码实例如下:由图中可以看出,符合基本的赫夫曼编码的原理,概率大的用短码,概率小的用长码。选择译码:结果如下: 四: 实验结论哈夫曼的具体实现,在数据结构的相关课程曾做相应的实验,所以无论在理解上或是实现上,都不是很困难,程序上实现哈夫曼的编码与译码,由于哈夫曼自身的特点,编码与译码均不是唯一,但是相同的编译码规则还是能实现正确的译码的。本实验,除了实现编译码的具体实现,还实现数据的存储与读取,这给实验实现方便,不必每次从命令提示符输入数据。总的来说,通过本次实验,对哈夫曼的编译码有了一个更好的认识。通过本次试验,对书上的理论知识有了进一步的认识,但是由于对编程软件的知识欠缺,导致有很多地方还是搞不懂,只能向同学学习,讨论。当然最终还是有一定的欠缺。对于哈夫曼编码的认识,是在以前的数据结构课程中就接触到的,但是当时只是知道哈夫曼树的编码而已。仅限于表面上的只是,并未曾想过用程序来实现它。所以对于此次试验并未有太大的帮助。通过实验,学到了很多东西,相信对以后的学习会更有帮助的。专心-专注-专业

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁