版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
信息论上级报告题目一算术编码1、题目要求算术编码是把一个信源表示为实轴上0和1之间的一个区间,信源集合中的每一个元素都用来缩短这个区间。算法流程输入信源符号个数,信源概率分布,还有需要编码的符号序列,根据概率可以算出初始编码间隔,High——当前编码的上限,Low——当前编码的下限,high——中间变量,用来计算下一个编码符号的当前间隔的上限,low——中间变量,用来计算下一个编码符号的当前间隔的下限,d——当前间隔之间的距离。扫描需编码的符号序列,确定编码空间第1个编码符号的当前间隔为其初始的编码间隔,第i个编码符号的当前间隔为第i-1个编码后的[Low,High),第i+1个编码符号的当前间隔算法如下:high=Low+d*第i+1个初始编码符号对应的上限,low=Low+d*第i+1个编码符号对应的下限,然后High=high,Low=low,d=d*第i个编码符号的概率。设计设计思想:其算法的主要算法基本思想:首先就是构造一个结构体用于存储信源的相关信息(包括信源符号,信源概率,编码的上下限);接着就是初始化信源的相关信息,如初始化编码间隔;利用算术编码的原理构造编码方法,最后实现编码。调试分析:此算法主要就是算术编码方法的构造,利用算法中Initial_message()函数初始化以后,根据初始化间隔完成编码序列的编码。在调试的过程中经常遇到一些小问题,通过一步步的调试以及修改,问题一个的解决了。同时也遇到比较大的问题,就是编码方法过程的实现,最大的体会就是必须深入理解次编码方法的原理。用户手册:首先设置信源符号的个数和编码的序列长度(即算法中宏定义的N和n),然后输入N个信源符号及其概率,如,a空格0.2输入(重复N次),最后输入长度为n的信源符号序列,即长度为n要编码的序列。5.流程图7,源程序清单:#include<stdio.h>#include<string.h>#include<conio.h>#defineN4//信源符号的个数#definen7〃要编码的序列长度structARC{charm[N];floatP[N];floatLow[N];floatHigh[N];floatlow;floathigh;}code;Initial_message()//初始化编码间隔floatF=0;inti=0,j;printf("请输A%d个信源符号及其概率!\n",N);for(i=0;i<N;i++){scanf("%c%f”,&code.m[i],&code.P[i]);getchar();}for(j=0;j<N;j++){code.Low[j]=F;F=F+code.P[j];code.High[j]=F;}printf("信源符号概率初始编码间隔\/);for(j=0;j<N;j++){printf("%c%f[%f,%f)\n",code.m[j],code.P[j],code.Low[j],code.High[j]);}}main(){inti=0;intBcode[10];charc[n];char*p=NULL;char*q=NULL;floats,mid;Initial_message();printf(-请输入长度为%d要编码的序列:”,n);scanf("%s”,c);p=c;q=code.m;while(q!=NULL)//判定第一个需要编码序列的第一符号所在的间隔{if(*p==*q){code.low=code.Low[i];code.high=code.High[i];printf("%c\n[%f,%f)\n",code.m[i],code.low,code.high);gotoss;}else{q++;i++;}}ss:p++;while(*p!='\0')//利用算术编码的方法,求出编码的十进制结果{intk=0;floatt;floatpt=0;intk1;q=code.m;while(*q!='\0'){if(*p==*q){if(k==0){t=code.high-code.low;code.low=code.low+t*pt;code.high=code.low+t*code.P[k];printf("%c\n[%f,%f)\n",code.m[k],code.low,code.high);gotoxx;}else{k1=k;while(k1){t=code.high-code.low;pt=pt+code.P[k1-1];k1--;}code.low=code.low+t*pt;code.high=code.low+t*code.P[k];printf("%c\n[%f,%f)\n",code.m[k],code.low,code.high);gotoxx;}}elseq++;k++;}xx:p++;}mid=(code.high-code.low)/2+code.low;s=2*mid;for(i=0;i<10;i++)〃编码结果{if(s>1){Bcode[i]=1;s=s-1;}else{Bcode[i]=0;}s=2*s;printf("%d”,Bcode[i]);}printf("\n");}题目一Huffman编码对英文文本的压缩和解压缩1、题目要求根据信源压缩编码一一Huffman编码的原理,制作对英文文本进行压缩和解压缩的软件。要求软件有简单的用户界面,软件能够对运行的状态生成报告,分别是:字符频率统计报告、编码报告、压缩程度信息报告、码表存储空间报告。设计设计思想:首先构造一个结构体用于统计字符频率,然后把统计后的结果当作信源;接着用Haffman编码的方法对其编码,编码后对输入的英语文本进行编码的转换,即用Haffman编码的每一个字符的编码代替输入的英语文本每一字符,输入的英语文本就变成了01代码流,最后利用这01代码流每八位压缩成相对应的字符。压缩流程:读取扫描文本文件-—〉-—〉-—〉保存压缩文件解压缩流程:读取扫描压缩文件一一〉提取字符频率一一〉生成码树一一〉保存文本文件调试分析:本算法可以分成四个部分即统计字符概率,Huffman编码,压缩文件和解压文件四部分,也就是次算法中函数stati(),函数HCode()和函数compress()的构建,用于压缩后的字符出现了乱码,所以对解压文件这部分难以实现,这也是此算法失败的地方。经过不断的调试和修改还是只完成统计字符概率,Huffman编码和压缩文件这三部分。用户手册:首先输入用于保存英语文本的文件名,然后输入要压缩的英语文本即可。5.流程图Huffman编码的对英文文本压缩和解压缩谓输入用于保存字符文本的文件名,如file.txtfile.txt请输入英语文本:aaabbbeeeeeettttthhhhhhkkll;;1,m..,nucfjggffgghhjhfgerefhhhthannhbhthhhenbbnfhjfhfhj概率字符概率a50.0458715596b80.0733944954e100.0917431193t70.0642201835h230.21100917^3k20.0183^486239130.0275229358.,2S018348623930.0275229358m10.0091743119.20.0183486239n50.0453715596u30.0275229358c40.0366972477f10G.09174311539100.0917431193d30.0275229358w10.0091743119q10.0091743119r20.0183486239X10.0091743119.J3Q.0275229358Haffman编码信源符号权值编码结果mWeightsCode=11O1OO0wU©ight=1Cod©=11G1Q01qWeightsCode=1lG101OXWeightsCode=1101011III■「"E:\*面V言息论上机编码的压葡口解压卦施而日\」一JXUeightUeight12Code=1101011Code=110006kUleight2Code=l10001rUeight2Code=11G01O.Ueight2Code=11Q011fl1bleight3Code=O0110AUleight3CodG=O0111uUeight3Cod@=10000dSight3Code=10001jUeight3Code=101QOcUeight4Code=l01O1aUeight5Code=11011nUleight5Cod@=0610tbieight7Code=10O1bheight8Code=1011eHeight16Code=1110fUleight10Code=11119bleight10Code=900hUeight23Code=01压缩后的结果保存于文件yasuo.txt其压缩率为0-495413Pressanykeytom:ontinu@rrurA■>i7.源程序清单:#include<stdio.h>#include<stdlib.h>#defineMaxValue1000〃设定权值最大值#defineMaxBit10〃设定的最大编码位数#defineMaxN1000〃设定的最大结点个数#include"Huffman.h”floatComNum=0;//用于计算压缩后的字符个数structstatistics〃统计字符频率{chara[100];〃出现的字符doublep[100];〃字符出现的概率inttag[100];//每一个字符出现次数intnum;〃总计出现的字符种类个数floatn;〃总计字符出现的次数}TJ;charcc[100];voidraplace(myHaffCode);stati()//统计字符{FILE*fp;FILE*fp1;charch,filename[10];inti=0,k;printf("请输入用于保存字符文本的文件名,如file.txt\n");scanf("%s”,filename);getchar();printf(-请输入英语文本:,gets(cc);fp=fopen(filename,"w+");fprintf(fp,"%s”,cc);fclose(fp);TJ.num=1;TJ.n=0;if((fp1=fopen(filename,"r"))==NULL){printf("文件无法打开!”);exit(0);}ch=fgetc(fp1);TJ.a[i]=ch;while(ch!=EOF)//统计字符出现的次数,并计算起概率。{intj;for(j=i;j>=0;j--){if(TJ.a[j]==ch){TJ.tag[j]+=1;gotoxx;}}i++;TJ.a[i]=ch;TJ.tag[i]+=1;TJ.num++;xx:ch=fgetc(fp1);TJ.n++;}fclose(fpl);for(k=0;k<=i;k++){TJ.p[k]=TJ.tag[k]/TJ.n;}printf("\t字符统计\n");printf("字符出现的次数概率\n");for(k=0;k<=i;k++){printf("%c%d%1.10f\n”,TJ.a[k],TJ.tag[k],TJ.p[k]);}}HCode()//haffman编码{inti,j,n=TJ.num;HaffNode*myHaffTree=(HaffNode*)malloc(sizeof(HaffNode)*(2*n+1));Code*myHaffCode=(Code*)malloc(sizeof(Code)*TJ.num);for(i=0;i<n;i++)//排序--按字符出现的次数从小到大排{intt=TJ.tag[i];chart1=TJ.a[i];for(j=i+1;j<n;j++){if(t>TJ.tag[j]){t=TJ.tag[j];TJ.tag[j]=TJ.tag[i];TJ.tag[i]=t;t1=TJ.a[j];TJ.a[j]=TJ.a[i];TJ.a[i]=t1;}}}Haffman(TJ.tag,n,myHaffTree);//建立叶结点个数为n权值数组为J.tag的哈夫曼树myHaffTreeHaffmanCode(myHaffTree,n,myHaffCode);//由n个结点的夫曼树myHaffTree构造哈夫曼编码myHaffCodeprintf("\tHaffman编码\n");printf("信源符号权值编码结果\n");for(i=0;i<n;i++){printf("%cWeight=%dCode=”,TJ.a[i],myHaffCode[i].weight);for(j=myHaffCode[i].start;j<n;j++)printf("%d",myHaffCode[i].bit[j]);printf("\n");}raplace(myHaffCode);}voidraplace(CodemyHaffCode[])//把英语文本的字母包(括标点符号)用已经用Haffman编码完成的编码结果代替成01代码并存于文件code.txt中{charch;inti,n,j;FILE*fp1;if((fp1=fopen("code.txt”,"w+"))==NULL){printf("文件无法打开!”);exit(0);}n=0;ch=cc[n];while(ch!='\0'){for(j=0;j<TJ.num;j++){if(ch==TJ.a[j]){for(i=myHaffCode[j].start;i<TJ.num;i++)fprintf(fp1,"%d”,myHaffCode[j].bit[i]);j=TJ.num;}}n++;ch=cc[n];}fclose(fp1);}voidcompress()//根据保存于
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 装修协议退款合同范本
- 装修垫款协议合同范本
- 设计软件服务合同范本
- 贝壳担保支付合同范本
- 购买卤水商用合同范本
- 购买水合同协议书范本
- 资金技术入股合同范本
- 2020-2025年检验类之临床医学检验技术中级自我提分评估(附答案)
- 2020-2025年助理医师之中医助理医师通关题库(附带答案)
- 2020-2025年社会工作者之高级社会工作实务真题练习试卷A卷附答案
- 2024年上海申康医疗卫生建设工程公共服务中心招聘笔试冲刺题
- 独股一箭2010年20w实盘
- 中药贴敷在骨折康复中的临床应用
- 母婴护理讲师如何讲好课件
- 杭州朝阳橡胶有限公司年产65万套全钢子午线轮胎(不含炼胶)过渡项目环境影响报告
- 河北省石家庄市正定县2023-2024学年九年级上学期11月期中物理试题
- 英语课题研究活动记录
- (完整版)UCLA孤独感量表
- 农药植保基础培训
- 厂房更换彩钢瓦施工方案
- GB/T 7588.2-2020电梯制造与安装安全规范第2部分:电梯部件的设计原则、计算和检验
评论
0/150
提交评论