信息论与编码实习报告(2)

2020-02-20 14:03

用户手册:

1.按照提示先输入随后将输入字符串的总个数

2.依次输入个字符串 3.得出结果 总结:

本次编程实验中进一步加深了对尾随后缀集合算法的理解,运用C语言将其实现。在程序中设置了一个互相比较两个字符串是否为对方前缀的函数,以求得尾随后缀。

程序大体写完后,又在原程序的基础上增加了它的鲁棒性。 附源代码:

#include #include char c[100][50]; char f[300][50];

int N,sum=0; //N为输入码字的个数,sum为尾随后缀集合中码字的个数 int flag; //判断是否唯一可译标志位

void patterson(char c[],char d[]) //检测尾随后缀 {

int i,j,k;

for(i=0;;i++) {

if(c[i]=='\\0'&&d[i]=='\\0')//2字符串一样,跳出 break;

if(c[i]=='\\0') //d比c长,将d的尾随后缀放入f中 {

for(j=i;d[j]!='\\0';j++) f[sum][j-i]=d[j]; f[sum][j-i]='\\0';

for(k=0;k

if(strcmp(f[sum],f[k])==0) /*查看当前生成的尾随后缀在f集

合中是否存在*/

{

sum--;break;

} }

sum++; break; }

if(d[i]=='\\0') //c比d长,将c的尾随后缀放入f中 {

for(j=i;c[j]!='\\0';j++) f[sum][j-i]=c[j]; f[sum][j-i]='\\0';

for(k=0;k

if(strcmp(f[sum],f[k])==0) /*查看当前生成的尾随后缀在

f集合中是否存在*/

{

sum--;break; } }

sum++; break; }

if(c[i]!=d[i])//字符不一样了也退出 break; } }

/*主函数*/ main() {

int i,j;

printf(\请输入码字的个数(小于100):\输入码得个数 scanf(\ while(N>100) { printf(\输入码字个数过大,请输入小于100的数\\n\ printf(\请输入码字的个数(小于100):\ scanf(\ }

flag=0;

printf(\请分别输入码字(每个码字长度小于50个字符):\\n\ for(i=0;i

scanf(\ }

for(i=0;i

{

if(strcmp(c[i],c[j])==0) {flag=1;break;} }

if(flag==1)//如果码本身有重复,就可以断定它不是唯一可译码 {

printf(\这不是唯一可译码。\\n\ } else {

for(i=0;i

入f中*/

{

for(j=i+1;j

patterson(c[i],c[j]); } }

for(i=0;;i++) //根据原始码与s[i]生成s[i+1]也放入f[i] {

int s=0;

for(j=0;j

重复的则不再添加*/

{

if(i==sum)

{ s=1;break;} else

patterson(f[i],c[j]); }

if(s==1)break; }

for(i=0;i

重复则不是唯一的*/

{

for(j=0;j

if(strcmp(f[i],c[j])==0) {

flag=1; break; } } }

if(flag==1)

{

printf(\这不是唯一可译码。\\n\ } else

printf(\这是唯一可译码。\\n\ }

printf(\尾随后缀集合为:\ for(i=0;i<=sum;i++) printf(\}

实验二 Shannon编码

一、 实验内容

编程实现Shannon编码算法 二、实验环境

1. 计算机

2. Windows 2000 或以上 3. VC++ 6.0 三、实验目的

1. 进一步熟悉Shannon编码算法;

2. 掌握C语言编程(尤其是数值的进制转换,数值与字符串之间的转换等) 四、实验要求

1. 提前预习实验,认真阅读实验原理。

2. 认真高效的完成实验,实验过程中服从实验室管理人员以及实验指导老

师的管理。 3. 认真填写实验报告。 五、实验原理

1. Shannon编码的原理参考书1的162页。 2. 算法流程

输入信源符号个数q,信源概率分布P 降序排列{pi} for i=1 →q

?1? 计算编码长度 li??log2?; p(s)i?? 计算累加概率F(si)??p(sk); k?1i?1 将累加概率F(si) (十进制小数)变成二进制数

六、参考书

1. 《信息论——基础理论及应用》傅祖芸,电子工业出版社 七、实验设计 1、数据结构

本实验所需设计的程序中,码字可用如下结构表示:

typedef struct symbol

{

char s[50];

double pa,pb,h; //分别为符号概率,累加概率,自信息量 int l; //码字长度 char m[100]; //码字

}symbol;

2、关键算法

本程序的关键算法是通过累加概率及码长求码字,其算法流程图如

下:

判断结果是否 Y

小于1 编码的下一位是1,并将所乘结果减1,目前得到的长度加1 开始 将累加概率pa乘以2 N

N

判断目前得到的长度是否等于编码长度 编码的下一位是0,目前得到的长度加1


信息论与编码实习报告(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:毕奥-萨伐尔定律是怎样建立的

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: