欢迎来到天天文库
浏览记录
ID:57437844
大小:377.22 KB
页数:27页
时间:2020-08-16
《信息论上机实习报告.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、信息论上机实习报告姓名:夏勇学院:数学与物理学院专业号:学号:目录信息论上机实习报告1判断唯一可译码1题目分析1算法分析1设计中遇到的问题及其解决方法2调试结果3源代码5香农编码14题目分析14算法分析14算法中遇到的问题及解决方法15调试结果15源代码16费诺编码20题目分析20算法分析21算法设计中遇到的问题和解决方法21运行结果22源代码23判断唯一可译码题目分析1)问题描述编一个程序判断一组码是不是唯一可译码.2)基本要求利用萨德纳斯和彼特森的判断思想来编辑程序.算法分析1)算法原理B1B2B3⋯⋯⋯BmA1A2A3⋯⋯⋯Am由图可知,B1一定是A1的前缀
2、,而A1的尾随后缀一定是另一码字B2的前缀;又B2的尾随后缀又是其他码字的前缀。最后,若码符号序列的尾部是码字,则其是非唯一可译码。2)算法设计和思想首先,由于在比较前缀时,码字的长度也是一个重要的量,所以需要设计一个结构体来存放码字和其长度。然后首先判断源码字中的所有的尾随后缀,运用了两个for循环来实现,使得每个源码字都作为前缀和所有的其他码字比较,找出所有的尾随后缀及其长度,放在对象f中。具体判断时,如果作为前缀的码字的长度大于其他的,则剔除,判断下一个。接着,我们比较源码字和f中的码字,在这里,源码字和f中的码字都要作为前缀和其他的码字比较,找出尾随后缀码
3、及其长度放入f中,判断方法和前面的相同。最后,比较f中的码字是否有和源码字相同的,若有,则其不是唯一可译码,否则,其是唯一可译码。设计中遇到的问题及其解决方法在起初设计中,一直不知道应该怎么比较码字来找出尾随后缀,后来仔细分析后,明白了在比较的时候牵扯到了码字的长度,既然有多个变量,那么就运用结构体变量。然后在比较的时候,就可以根据它的长度来划分它的尾随后缀码,其的长度也就知道了。在具体编程时,要避免变量在多处运用。因为如果你忘记了初始化就会导致错误,而且很难找出来,所以尽量不要多处使用,如果你一定要用的话,那就在它的后面加上标注。另外,在设计当中从老师那里学会了
4、一种检错方法,就是一步一步的调试,虽然有点麻烦,但是效果相当不错。调试结果源代码#include#include#include#defineN1typedefstruct{inta[20];//数据intlen;//码字长度}Code;main(){inti,j,z=0,n,b,count=0,flag=0,flag1=0,sum=0,h,m;charc[20],*p;//过渡,接收每个码字Coded[100],f[100];printf("按次序依次输入每个码字:");gets(c);p=c;while
5、(*p!=' '){if(*p=='')p++;else{i=0;while(*(p+i)!=''&&*(p+i)!=' ')i++;for(j=0;j
6、.len){for(z=0;z7、8、d[i].a[0]!=d[j].a[0]9、10、d[j].len==d[i].len)continue;b=d[i].len;while(11、b){b--;if(d[i].a[b]==d[j].a[b])flag=1;else{flag=0;break;}}b=d[i].len;if(flag!=0){for(z=0;z<(d[j].len-d[i].len);z++)f[count].a[z]=d[j].a[b+z];f[count].len=d[j].len-d[i].len;count++;//f中码字的个数}}}//在源码字里找前缀m=count;for(h=0;h12、j].le
7、
8、d[i].a[0]!=d[j].a[0]
9、
10、d[j].len==d[i].len)continue;b=d[i].len;while(
11、b){b--;if(d[i].a[b]==d[j].a[b])flag=1;else{flag=0;break;}}b=d[i].len;if(flag!=0){for(z=0;z<(d[j].len-d[i].len);z++)f[count].a[z]=d[j].a[b+z];f[count].len=d[j].len-d[i].len;count++;//f中码字的个数}}}//在源码字里找前缀m=count;for(h=0;h12、j].le
12、j].le
此文档下载收益归作者所有