费诺和香农编码源程序及运行结果_第1页
费诺和香农编码源程序及运行结果_第2页
费诺和香农编码源程序及运行结果_第3页
费诺和香农编码源程序及运行结果_第4页
费诺和香农编码源程序及运行结果_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

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

文档简介

香农编码源程序#include<iostream.h>#include<math.h>#include<iomanip.h>#include<stdlib.h>classT{public:T(){}~T();voidCreate();voidCoutpxj();voidCoutk();voidCoutz();voidPrint();protected:intn;double*p;double*pxj;int*k;double*mz;};voidT::Create(){cout<<"请输入信源符号个数:";cin>>n;p=newdouble[n];cout<<"请分别输入这"<<n<<"个概率:\n";for(inti=0;i<n;i++)cin>>p[i];pxj=newdouble[n];k=newint[n];mz=newdouble[n];doublesum=0.0;for(i=0;i<n;i++)sum+=p[i];if(sum!=1.0)throw1;else{for(i=0;i<n;i++){intk=i;for(intj=i+1;j<n;j++)if(p[k]<p[j])k=j;doublem=p[i];p[i]=p[k];p[k]=m;}}}T::~T(){deletep;deletepxj;deletek;deletemz;}voidT::Coutpxj(){pxj[0]=0;for(inti=1;i<n;i++){pxj[i]=0;for(intj=0;j<i;j++)pxj[i]+=p[j];}}voidT::Coutk(){for(inti=0;i<n;i++){doubled=(-1)*(log(p[i])/log(2));if(d-(int)d>0)k[i]=(int)d+1;elsek[i]=(int)d;}}voidT::Print(){cout<<"Xi"<<setw(8)<<"P(xi)"<<setw(8)<<"Pa(xj)"<<setw(8)<<"Ki"<<setw(8)<<"码字"<<endl;for(inti=0;i<n;i++){cout<<"X"<<i+1<<setw(8)<<setprecision(2)<<p[i]<<setw(8)<<setprecision(2)<<pxj[i]<<setw(8)<<k[i]<<"";mz[i]=pxj[i];for(intj=0;j<k[i];j++){if(2*mz[i]-1>=0){cout<<1;mz[i]=2*mz[i]-1;}else{cout<<0;mz[i]=2*mz[i];}}cout<<endl;}doubleK=0.0,H=0.0,Y;for(i=0;i<n;i++){K+=(double)p[i]*k[i];H+=(-1)*p[i]*(log10(p[i])/log10(2.0));}Y=H/K;cout<〈"平均码长:"<<K<<endl;cout<<"信源熵:"<<H<<endl;cout<<"编码效率:"<<Y<<endl;}voidmain(){Tt;inte;try{t.Create();t.Coutpxj();t.Coutk();t.Print();}catch(inte){if(e==1)cout<<"输入错误,请重新运行";}}费诺编码源程序#include<iostream.h>#include<math.h>#defineN15intpa[N][N];voidfano(floatp[],inta[N][N],intn,intm,intk){floatg=0.0,h=0.0,d,b,c;inti,j,flase;if(n<m){for(i=n;i<=m;i++){g=p[i]+g;}g=g/2;for(i=n;i<=m;i++){h=h+p[i];if(h>g){d=h-p[i];b=h-g;c=g-d;if(c>b){for(j=n;j<=i;j++)a[j][k]=0;fano(p,a,n,i,k+1);for(j=i+1;j<=m;j++)a[j][k]=1;fano(p,a,i+1,m,k+1);}else{for(j=n;j<=i-1;j++)a[j][k]=0;fano(p,a,n,i-1,k+1);for(j=i;j<=m;j++)a[j][k]=1;fano(p,a,i,m,k+1);}break;}}}}voidmain(){inti,j,k[N],n,flase=0;floatp[N],m,H=0.0,K=0.0,sum=0.0;cout<<"输入信源符号个数"<<endl;cin>>n;cout<<"输入各信源符号概率"<<endl;for(i=1;i<=n;i++){cin>>p[i];}for(i=1;i<=n;i++){sum=sum+p[i];}for(i=1;i<=n;i++){if(p[i]<0.0||p[i]>1.0||sum!=1.0){cout<<"inputgailverror!";flase=1;break;}if(flase==0){for(i=0;i<=n;i++)for(j=0;j<=n;j++){pa[i][j]=10;}fano(p,pa,1,n,1);cout<<"信源费诺编码如下:\n";for(i=1;i<=n;i++){k[i]=0;cout<<"x"<<i<<"="<<p[i]<<"\t码字为\t";for(j=1;j<=n;j++){if(pa[i][j]!=10){cout<<pa[i][j];k[i]++;}}cout<<"\t码长为\t"<<k[i]<<endl;}for(i=1;i<=n;i++){H=-(p[i]*log(p[i])/log(2))+H;}cout<<"信源熵 H(X)="<<H<<"(比特/符号)"<<endl;for(i=1;i<=n;i++){K=p[i]*k[i]+K;}cout<<"平均码长K="<<K<<"(比特/符号)"<<endl;cout<<"编码效率为"<<(H/K)*100<<"%"<<endl;}//if(flase==0)cout<<endl;}//main()借□IX攵s.号r\55/75211辙4辑B,B,B,0点1233>号为为为为W

温馨提示

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

评论

0/150

提交评论