《信息论实验二:求平均互信息.docx》由会员分享,可在线阅读,更多相关《信息论实验二:求平均互信息.docx(4页珍藏版)》请在三一文库上搜索。
1、信息论实验二:求平均互信息信息论实验二 : 求英文文本互信息量实验代码 : if(g=32)M00=M00+1;elseg=g-64;M0g+;for(i=0;pi>0;i+)/填满矩阵的其他行#include "stdio.h" if(pi!=32)h=pi-64;k=pi+1; #include"stdlib.h" if(k>0)if(k=32)k=0; #include <math.h> else k=k-64;Mhk=Mhk+1;/ 求出连续两个字母出现的总数void main() for(i=0;i<27;i+)F
2、ILE *fp; for(j=0;j<27;j+)fp=fopen("1.txt","r"); total=total+Mij;/ 矩阵复制 int l,i=0,j=0;int p9999;/用于存放字母 for(i=0;i<27;i+)int b,c,add=0; for(j=0;j<27;j+)Nij=Mij;/ 求条件 float num26=0,space=0; float t; for(j=0;j<27;j+)double shang; for(i=0;i<27;i+) float f26=0; sj=sj+Mij
3、;/ 求 p(xy) float M2727=0,N2727=0; float total=0; for(i=0;i<27;i+)float Hxy=0; for(j=0;j<27;j+)float s27=0; Mij=Mij/total;/ 求 p(x/y) if(fp=NULL)int h,k; for(j=0;j<27;j+) for(i=0;i<27;i+)printf("文件不存在 n"); exit(0); Nij=Nij/sj;while(l=fgetc(fp)!=EOF)/把字符的 /输出转移矩阵;ASC码存入数组中printf(&
4、quot;转移矩阵为:n");pi+=l; for(i=0;i<4;i+) for(i=0;pi>0;i+)/小写字母和大写字母统for(j=0;j<4;j+)一 ( 即不区分大小写) printf("%f ",Nij);if(pi>=97) printf("n");/ 求信道疑义度 pi=pi-32; / 创建矩阵 for(i=0;i<27;i+)for(i=0;pi>0;i+)/创建行 for(j=0;j<27;j+)if(pi=32) if(Nij!=0)int g=pi+1; Mij=Mij*l
5、og(1/Nij);/ 信道疑义度for(i=0;i<27;i+) for(j=0;j<27;j+) Hxy=Hxy+Mij; printf("信道损失熵为 :n");printf("%f",Hxy); printf("n");printf("n");/ 计算熵fp=fopen("1.txt","r"); if(fp=NULL)printf("该文件不存在 n"); exit(0);while(c=fgetc(fp)!=EOF)if(c>
6、='a'&&c<='z') numc-97+;else if(c>='A'&&c<='Z') numc-'A'+;if(c=32)space+;t=0;shang=0;for(i=0;i<=25;i+) t=t+numi;t+=space;printf("各字母的概率为 :n");for(i=0;i<=25;i+) fi=numi/t;if(fi!=0)printf("P(%c)=%fn",97+i,fi);flo
7、at ps;printf("space=%fn",ps=space/t);for(i=0;i<=25;i+)if(fi!=0)shang=shang-fi*log(fi);if(ps!=0)shang-=ps*log(ps); printf("n信息熵为 :n%f",shang); fclose(fp);printf("n"); float I; I=shang-Hxy; printf("n"); printf("平均互信息为 :n"); printf("%fn",I); printf("n");_End_