信息论实验二:求平均互信息

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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 else {k=k-64;} M[h][k]=M[h][k]+1;}}}

//求出连续两个字母出现的总数 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_________________

相关文档
最新文档