首页 > 条据书信 > 外贸信函 / 正文
实验二互信息的计算
2020-08-05 10:03:14 ℃实验二 互信息的计算 信科 1.实验目的 进一步熟悉互信息的计算 熟练掌握编程语言字符处理程序的设计和调试技术 2.实验要求 已知:信源符号为英文字母(不区分大小写)和空格。
输入:一篇英文的信源文档。
输出:列出每两个字母之间的互信息并计算平均互信息。
基本思想 读入英文字符,分两次读入 第一次读入计算字符信息熵,第二次读入计算信道疑义度。
计算平均互信息时,把读入的每个英文字符转化为对应的ASCII码,存入数组中。
定义一个矩阵,用于存放前后两个字母出现的次数。对数组做循环,p[i]指向前一个字符,p[i+1]指向后个字符,每向后移动一位,把矩阵的元素加1,直至把数组循环完。复制一个矩阵,分别求出联合概率和条件概率,把两个矩阵对应的元素相乘,把矩阵元素累加,即得信道疑义度。用熵减去信道疑义度,即得平均互信息。
英文字符 Each of us has such a bank.It's name is “TIME“.Every morning,TIME creditsyou with 86400 seconds.Every night it writes over no balances. It allows no overdraft.Each day it opens a new account for you.Each night it burns the remains of the day.If you fail to use the day's deposits,tge loss is yours.There is no going back.There is no drawing against the “tomorrow“.You must live in the present on today's deposits.Invest it so as to get from it the utmost in health,happiness and success!The clock is running.Make the most of today. #include “stdio.h“ #include “stdlib.h“ #include <math.h> void main() { FILE *fp; fp=fopen(“file.txt“,“r“); int d,i=0,j=0; int p[1000];//用于存放字母 int b,c,add=0; float num[26]={0},space=0; float t; double shang; float f[26]={0}; float M[27][27]={0},N[27][27]={0}; if(fp==NULL) { printf(“不能打开文件\n“); exit(0); }; while((d=fgetc(fp))!=EOF)//把字符的ASC码存入数组中 { p[i++]=d; } for(i=0;p[i]>0;i++)//把小写字母转化成大写字母 { if(p[i]>=97) p[i]=p[i]-32; } printf(“字符的ASC码为:\n“); for(int a=0;p[a]>0;a++) { printf(“%d “,p[a]); } printf(“\n“); //把p填入矩阵M中 for(i=0;p[i]>0;i++)//填满矩阵M第一行 { if(p[i]==32) { int g=p[i+1]; if(g==32) { M[0][0]=M[0][0]+1; } else { g=g-64; M[0][g]++; } } } for(i=0;p[i]>0;i++)//填满矩阵的其他行 { if(p[i]!=32) { int h,k; 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; } } } //求出连续两个字母出现的总数 float total=0; 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]; } } //求条件 float s[27]={0}; for(j=0;j<27;j++) for(i=0;i<27;i++) { s[j]=s[j]+M[i][j]; } //求p(xy)并存储在M[27][27]中 for(i=0;i<27;i++) for(j=0;j<27;j++) { M[i][j]=M[i][j]/total; } //求p(x/y)并存储在N[27][27]中 for(j=0;j<27;j++) for(i=0;i<27;i++) { N[i][j]=N[i][j]/s[j]; } /* for(i=0;i<4;i++)///矩阵输出 { for(j=0;j<4;j++) { printf(“%f “,N[i][j]); } printf(“\n“); };*/ //求信道疑义度 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]); } } //信道疑义度 float Hxy=0; 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(“file.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(“%c,%f “,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信息熵=%f“,shang); fclose(fp); printf(“\n“); float I; I=shang-Hxy; printf(“\n“); printf(“平均互信息I(X;Y)为:\n“); printf(“%f\n“,I); printf(“\n“); }
猜你喜欢
- 2024-01-15 关于外贸发展情况调研报告
- 2024-01-04 关于外贸领域进出口情况调研报告
- 2023-10-23 2023年度外贸协议书4篇【精选推荐】
- 2023-10-11 2023年关于外贸总结9篇【完整版】
- 2023-08-22 外贸业务员工作计划怎么写-业务员工作计划6篇
- 2023-08-19 2023年度外贸下半年工作计划4篇
- 2023-06-18 2023年应届生外贸实习报告3000字
- 2023-06-18 网上外贸业务实习报告例文【优秀范文】
- 2023-06-18 2023年度电子公司外贸跟单员实习报告
- 2023-06-18 2023年度外贸公司大学生实习报告
- 搜索
-
- 学习第三次中央新疆工作座谈会心得体会 09-28
- 关于党建工作与业务工作深度融合的几点 03-25
- 2020新冠疫苗预防接种应急预案 12-24
- 项目评审费用管理办法 07-01
- 某市纪委关于对督导力度不够、基层监督 03-12
- [公司新年贺词]公司买新机器祝福语 11-25
- 政府宣传标语(精选多篇) 01-29
- 基层党建联系点工作制度 08-06
- 参观哈尔滨党史纪念馆心得 09-06
- 2020秋新教科版小学三年级科学上期中测 10-29
- 网站分类
-
- 标签列表
-