ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:509.71KB ,
资源ID:29961617      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/29961617.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(信息论实验报告.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

信息论实验报告.docx

1、信息论实验报告信息论实验报告计通学院实验一:唯一可译码判别准则1、实验目的:1 进一步熟悉唯一可译码判别准则;2 掌握C语言字符串处理程序的设计和调试技术。2、实验原理:已知:信源符号个数r、码字集合C用下列步骤判断是否为唯一可译码:考察C中所有的码字,若Wi是Wj的前缀,则将相应的后缀作为一个尾随后缀码放入集合F0中;考察C和Fi两个集合,若WiC是WjFi的前缀或者WjFi是WiC的前缀,则将相应的后缀作为尾随后缀码放入集合Fi+1中;F=UiFi即为码C的尾随后缀集合;若F中出现了C中的元素,则算法终止,返回假(C不是唯一可译码);否则,若F中没有出现新的元素,则返回真。 3、实验环境:

2、windows;visual basic 6.0;4、实验代码:存档名:diyici#include #include #include struct strings char *string; struct strings *next;struct strings Fstr, *Fh, *FP;/输出当前集合void outputstr(strings *str) do coutstringnext; while(str); coutb?b:a; inline int MAX(int a, int b) return ab?a:b;#define length_a (strlen(CP)#d

3、efine length_b (strlen(tempPtr)/判断一个码是否在一个码集合中,在则返回0,不在返回1int comparing(strings *st_string,char *code) while(st_string-next) st_string=st_string-next; if(!strcmp(st_string-string,code) return 0; return 1;/判断两个码字是否一个是另一个的前缀,如果是则生成后缀码void houzhui(char *CP,char *tempPtr) if (!strcmp(CP,tempPtr) cout集合C

4、和集合F中有相同码字:endl CPendl 不是唯一可译码码组!next=NULL; cp_temp-string=new charabs(length_a-length_b)+1; char *longstr; longstr=(length_alength_b ? CP : tempPtr);/将长度长的码赋给longstr /取出后缀 for (int k=MIN(length_a,length_b); kstringk - MIN(length_a,length_b)=longstrk; cp_temp-stringabs(length_a-length_b)=NULL; /判断新生

5、成的后缀码是否已在集合F里,不在则加入F集合 if(comparing(Fh,cp_temp-string) FP-next=cp_temp; FP=FP-next; void main()/功能提示和程序初始化准备 struct strings Cstr, *Ch, *CP,*tempPtr; Ch=&Cstr; CP=Ch; Fh=&Fstr; FP=Fh; char c=C :; Ch-string=new charstrlen(c); strcpy(Ch-string, c); Ch-next=NULL; char f=F :; Fh-string=new charstrlen(f);

6、 strcpy(Fh-string, f); Fh-next=NULL; /输入待检测码的个数 int Cnum; coutCnum; cout输入待检测码endl; for(int i=0; iCnum; i+) couti+1tempstr; CP-next=new (struct strings); CP=CP-next; CP-string=new charstrlen(tempstr) ; strcpy(CP-string, tempstr); CP-next = NULL; outputstr(Ch); CP=Ch; while(CP-next-next) CP=CP-next;

7、tempPtr=CP; do tempPtr=tempPtr-next; houzhui(CP-string,tempPtr-string); while(tempPtr-next); outputstr(Fh); struct strings *Fbegin,*Fend; Fend=Fh; while(1) if(Fend = FP) cout这是唯一可译码码组next) CP=CP-next; tempPtr=Fbegin; for(;) tempPtr=tempPtr-next; houzhui(CP-string,tempPtr-string); if(tempPtr = Fend)

8、break; outputstr(Fh);/输出F集合中全部元素 5、实验结果及分析:程序基本上满足要求。实验二:Huffman编码1、 实验目的:(1) 进一步熟悉Huffman编码过程;(2)掌握C语言递归程序的设计和调试技术。2、 实验内容:(1)输入:信源符号个数r、信源的概率分布P;(2)输出:每个信源符号对应的Huffman编码的码字。3、实验原理: 霍夫曼码是用概率匹配方法进行信源编码。有两个明显特点:一是保证了概率大的符号对应于短码,概率小的对应于长码,充分利用了短码;二是缩减信源的最后二个码字总是最后一位不同,从而保证了霍夫曼码是即时码。霍夫曼变长码的效率很高,它可以单个信源

9、符号编码或用L较小的信源序列编码,对编码器的设计来说也易实现。4、实验代码及实验文件存档名:实验环境:Windows,Microsoft visual C+文件存档名:dierci代码如下:#include ;#include ;#include ;#include ;typedef struct /构建结构体函数 unsigned int weight; unsigned int parent,lchild,rchild; HTNode,*HuffmanTree;typedef char *HuffmanCode;typedef struct unsigned int s1; /变量名 un

10、signed int s2; MinCode;void Error(char *message);HuffmanCode HuffmanCoding(HuffmanTree HT,HuffmanCode HC,unsigned int *w,unsigned int n);MinCode Select(HuffmanTree HT,unsigned int n); /哈弗曼树函数void Error(char *message)system(CLS); fprintf(stderr,Error:%sn,message); exit(1);HuffmanCode HuffmanCoding(Hu

11、ffmanTree HT,HuffmanCode HC,unsigned int *w,unsigned int n) /利用霍夫曼树来实现编码函数 unsigned int i,s1=0,s2=0; HuffmanTree p; char *cd; unsigned int f,c,start,m; MinCode min; if(n=1) Error(Code too small!); m=2*n-1; HT=(HuffmanTree)malloc(m+1)*sizeof(HTNode); for(p=HT,i=0;iweight=*w; p-parent=0; p-lchild=0; p

12、-rchild=0; for(;iweight=0; p-parent=0; p-lchild=0; p-rchild=0; for(i=n+1;i=m;i+) min=Select(HT,i-1); s1=min.s1; s2=min.s2; HTs1.parent=i; HTs2.parent=i; HTi.lchild=s1; HTi.rchild=s2; HTi.weight=HTs1.weight+HTs2.weight; printf(HT List:n); for(i=1;i=m;i+) HC=(HuffmanCode)malloc(n+1)*sizeof(char *); cd

13、=(char *)malloc(n*sizeof(char *); cdn-1=0; for(i=1;i=n;i+) start=n-1; for(c=i,f=HTi.parent;f!=0;c=f,f=HTf.parent) if(HTf.lchild=c) cd-start=0; else cd-start=1; HCi=(char *)malloc(n-start)*sizeof(char *); strcpy(HCi,&cdstart); free(cd); return HC;MinCode Select(HuffmanTree HT,unsigned int n) /构建紧致码 u

14、nsigned int min,secmin; unsigned int temp; unsigned int i,s1,s2,tempi; /变量定义 MinCode code; s1=1;s2=1; for(i=1;i=n;i+) if(HTi.parent=0) min=HTi.weight; s1=i; break; tempi=i+; for(;i=n;i+) if(HTi.weightmin&HTi.parent=0) min=HTi.weight; s1=i; for(i=tempi;i=n;i+) if(HTi.parent=0&i!=s1) secmin=HTi.weight

15、; s2=i; break; for(i=1;i=n;i+) if(HTi.weights2) temp=s1; s1=s2; s2=temp; code.s1=s1; code.s2=s2; return code;void main() /主函数体 HuffmanTree HT=NULL; HuffmanCode HC=NULL; unsigned int *w=NULL; unsigned int i,n; system(CLS); printf(输入变量的个数:n); scanf(%d,&n); w=(unsigned int *)malloc(n+1)*sizeof(unsigned int *); w0=0; printf(输入相应概率对应的权值(即LOG值,底数为2),以回车键结束:n); for(i=1;i=n;i+) printf(w%d=,i); scanf(%d,&wi); HC=HuffmanCoding(HT,HC,w,n);for(i=1;i=n;i+) printf(%dtt%dtt%sn,i,wi,HCi);5、 实验结果及分析:实验截图:分析:程序基本满足要求,通过数据结构学过的huffman树,利用权值构造了紧致码。

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1