信息论实验二:求平均互信息
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
信息论实验二:求平均互信息信息论实验二:求英文文本互信息量
实验代码: if(g==32){M[0][0]=M[0][0]+1;}
else{g=g-64;M[0][g]++;}}}
for(i=0;p[i]>0;i++)//填满矩阵的其他行
#include "stdio.h" {if(p[i]!=32){h=p[i]-64;k=p[i+1]; #include "stdlib.h" if(k>0){if(k==32){k=0;} #include
//求出连续两个字母出现的总数 void main()
{ for(i=0;i<27;i++)
FILE *fp; for(j=0;j<27;j++)
fp=fopen("1.txt","r"); {total=total+M[i][j];}
//矩阵复制 int l,i=0,j=0;
int p[9999];//用于存放字母 for(i=0;i<27;i++)
int b,c,add=0; {for(j=0;j<27;j++){N[i][j]=M[i][j];}}
//求条件 float num[26]={0},space=0;
float t; for(j=0;j<27;j++)
double shang; for(i=0;i<27;i++)
float f[26]={0}; {s[j]=s[j]+M[i][j];}
//求p(xy) float M[27][27]={0},N[27][27]={0};
float total=0; for(i=0;i<27;i++)
float Hxy=0; for(j=0;j<27;j++)
float s[27]={0}; {M[i][j]=M[i][j]/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);}; {N[i][j]=N[i][j]/s[j];}
while((l=fgetc(fp))!=EOF)//把字符的//输出转移矩阵;
ASC码存入数组中 printf("转移矩阵为:\n");
{p[i++]=l;} for(i=0;i<4;i++){ for(i=0;p[i]>0;i++)//小写字母和大写字母统for(j=0;j<4;j++) 一(即不区分大小写) {printf("%f ",N[i][j]);} {if(p[i]>=97) printf("\n");};
//求信道疑义度 p[i]=p[i]-32;}
/创建矩阵 for(i=0;i<27;i++)
for(i=0;p[i]>0;i++)//创建行 for(j=0;j<27;j++)
{if(p[i]==32) {if(N[i][j]!=0)
{int g=p[i+1]; {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("信道损失熵为:\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>='a'&&c<='z') num[c-97]++;
else if(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("各字母的概率为:\n");
for(i=0;i<=25;i++){ f[i]=num[i]/t;
if(f[i]!=0)
printf("P(%c)=%f\n",97+i,f[i]);}
float ps;
printf("space=%f\n",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("\n信息熵为:\n%f",shang); fclose(fp);
printf("\n"); float I; I=shang-Hxy; printf("\n"); printf("平均互信息
为:\n"); printf("%f\n",I); printf("\n");}
_________________End_________________