信息与编码实验一信息熵的计算_第1页
信息与编码实验一信息熵的计算_第2页
信息与编码实验一信息熵的计算_第3页
信息与编码实验一信息熵的计算_第4页
信息与编码实验一信息熵的计算_第5页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、桂林电子科技大学 数学与计算科学学院实验报告 实验室:06406 实验日期:2015年12月12日院(系)数学与计算科学学号1200710218姓名韩尚颖成绩课程名称信息与编码实验实验项目名 称实验一 信息熵的计算指导教师一 ,实验目的1. 将一大段英文文章作为要统计的样本文件2. 对样本文件进行一维概率统计,并计算出信源熵及冗余度3. 对样本文件进行二维概率统计,并计算出信源熵及冗余度二,实验原理 在进行统计时,首先要在程序中打开文件,然后对文件中的字符读入程序中,进行统计。而在二维统计时,尤其要求对文件的指针操作要熟悉。如读入 “newspaper”时,应该依次读入 “ne ew ws s

2、p pa ap pe er”,而如果使用fgetc()等命令读文件时,读入的是 “ne ws pa pe” 为了依次读入“ne ew ws sp pa ap pe er”,就要求在每次调入fgetc()等命令后,再将文件指针往后退一步,即要求学生能熟练使用fseek()命令进行指针定位操作。三,使用仪器,材料计算机,Visual C+ 6.0四,实验内容与步骤(过程及结果截图)首先,下载或者建立一个含有英文字母的txt文档,接下来,编写程序统计字符以及计算熵。一维:#include<stdio.h>#include<string.h>#include<math.h

3、>#define _FILEPATH "F:xinhao与编码0.txt"#define _ALAPHA_NUMBER (int)('z'-'a'+1)void PrintStati(int arr,int size);int Stati(const char *filePath,int arr);float EntropCompute(int arr,int sum,int arrSize);int main()int arr_ALAPHA_NUMBER*2=0;int sampleSize=0;sampleSize=Stati(_F

4、ILEPATH,arr);PrintStati(arr,_ALAPHA_NUMBER*2);printf("n");printf("sample size:%dn",sampleSize);printf("entrop:%fn",EntropCompute(arr,sampleSize,_ALAPHA_NUMBER*2);return 0;void PrintStati(int arr,int size)int i=0;while(i<size)if(i<_ALAPHA_NUMBER)printf("%c:%d

5、",i+'a',arri);elseprintf("%c:%d ",i+'A'-_ALAPHA_NUMBER,arri);i+;int Stati(const char *filePath,int arr)FILE *pFile=NULL;char c;int sum=0;pFile=fopen(filePath,"rb");if(pFile=NULL)printf("fail to open file");return 0;while(1)c=fgetc(pFile);if(c=EOF)br

6、eak;if(c>='a'&&c<='z')arrc-'a'+;sum+;else if(c>='A'&&c<='z')arr_ALAPHA_NUMBER+c-'A'+;sum+;fclose(pFile);return sum;float EntropCompute(int arr,int sum,int arrSize)float entrop=0.0F;int i=0;float probability=0;while(i<arrS

7、ize)if(arri!=0)probability=(arri*1.0F)/sum;entrop+=(-probability*(log(probability)/log(2);i+;return entrop;运行结果: 二维:#include <stdio.h>#include <math.h>#include <stdlib.h>#define NULL 0int charge(char c)int n; if(c>=65&&c<=90) c=c+32; if( c>+97&&c<=122) n

8、=c-97; return n; else return -1;int main() int count2626=0; char zifu1,zifu2; int i,n,m,j; int sum=0; float q, sum1=0; FILE *fp; if(fp=fopen("F:xinhao与编码0.txt", "rb")=NULL) printf(" can't open file!n"); exit(0); while(!feof(fp) zifu1=fgetc(fp); n=charge(zifu1); if(n

9、!= -1) zifu2=fgetc(fp); m=charge(zifu2); if(m!= -1) countnm+; fseek(fp,-1,1); fclose(fp); for(i=0;i<26;i+) for(j=0;j<26;j+) sum=sum+countij; printf("the number of all the code is %dn", sum); q=(float)sum; for(i=0;i<26;i+) for(j=0;j<26;j+) if(j%3=0) printf("n"); printf("%c%c,%4d, %6.5f% ",i+97,j+97,countij,countij*100/q); printf("n"); for(i=0;i<26;i+) for(j=0;j<26;j+) if(countij)sum1=sum1+(float)(countij/q)*log10(1/(double)(countij /q)/log10(doub

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论