voidmain(){FILE*fp;fp=fopen("1.txt","r");intl,i="> voidmain(){FILE*fp;fp=fopen("1.txt","r");intl,i=" />
欢迎来到天天文库
浏览记录
ID:58668776
大小:81.00 KB
页数:2页
时间:2020-10-15
《信息论实验二:求平均互信息.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、信息论实验二:求英文文本互信息量实验代码:#include"stdio.h"#include"stdlib.h"#includevoidmain(){FILE*fp;fp=fopen("1.txt","r");intl,i=0,j=0;intp[9999];//用于存放字母intb,c,add=0;floatnum[26]={0},space=0;floatt;doubleshang;floatf[26]={0};floatM[27][27]={0},N[27][27]={0};floattotal=0;floatHxy=
2、0;floats[27]={0};if(fp==NULL)inth,k;{printf("文件不存在!");exit(0);};while((l=fgetc(fp))!=EOF)//把字符的ASC码存入数组中{p[i++]=l;}for(i=0;p[i]>0;i++)//小写字母和大写字母统一(即不区分大小写){if(p[i]>=97)p[i]=p[i]-32;}/创建矩阵for(i=0;p[i]>0;i++)//创建行{if(p[i]==32){intg=p[i+1];if(g==32){M[0][0]=M[0][0]+1;}els
3、e{g=g-64;M[0][g]++;}}}for(i=0;p[i]>0;i++)//填满矩阵的其他行{if(p[i]!=32){h=p[i]-64;k=p[i+1];if(k>0){if(k==32){k=0;}else{k=k-64;}M[h][k]=M[h][k]+1;}}}//求出连续两个字母出现的总数for(i=0;i<27;i++)for(j=0;j<27;j++){total=total+M[i][j];}//矩阵复制for(i=0;i<27;i++){for(j=0;j<27;j++){N[i][j]=M[i][j];}}
4、//求条件for(j=0;j<27;j++)for(i=0;i<27;i++){s[j]=s[j]+M[i][j];}//求p(xy)for(i=0;i<27;i++)for(j=0;j<27;j++){M[i][j]=M[i][j]/total;}//求p(x/y)for(j=0;j<27;j++)for(i=0;i<27;i++){N[i][j]=N[i][j]/s[j];}//输出转移矩阵;printf("转移矩阵为:");for(i=0;i<4;i++){for(j=0;j<4;j++){printf("%f",N[i][j]
5、);}printf("");};//求信道疑义度for(i=0;i<27;i++)for(j=0;j<27;j++){if(N[i][j]!=0){M[i][j]=M[i][j]*log(1/N[i][j]);}}//信道疑义度for(i=0;i<27;i++)for(j=0;j<27;j++){Hxy=Hxy+M[i][j];}printf("信道损失熵为:");printf("%f",Hxy);printf("");printf("");//计算熵fp=fopen("1.txt","r");if(fp==NULL){p
6、rintf("该文件不存在!");exit(0);};while((c=fgetc(fp))!=EOF){if(c>='a'&&c<='z')num[c-97]++;elseif(c>='A'&&c<='Z')num[c-'A']++;if(c==32){space++;};}t=0;shang=0;for(i=0;i<=25;i++)t=t+num[i];t+=space;printf("各字母的概率为:");for(i=0;i<=25;i++){f[i]=num[i]/t;if(f[i]!=0)printf("P(%c)=%f
7、",97+i,f[i]);}floatps;printf("space=%f",ps=space/t);for(i=0;i<=25;i++){if(f[i]!=0)shang=shang-f[i]*log(f[i]);}if(ps!=0)shang-=ps*log(ps);printf("信息熵为:%f",shang);fclose(fp);printf("");floatI;I=shang-Hxy;printf("");printf("平均互信息为:");printf("%f",I);printf("
8、");}_________________End_________________
此文档下载收益归作者所有