信息论实验报告-

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

信息论实验报告

学生:

班级:

学号:

实验一香农编码一、程序设计的流程图

二、程序清单

#include

#include

#include

using namespace std;

void swap(double *x,double *y);

int main()

{

int N;

cout<<"输入信源个数"<

cin>>N;

double S[N]; //注意变量在数组中的影响cout<<"输入信源概率"<

for(int i=0;i

cin>>S[i];

for(int i=0;i

{

for(int j=i;j

if(S[i]

swap(S[i],S[j]);

}

int nm[N];

for(int i=0;i

{

nm[i]=int(-(log(S[i])/log(2)))+1;

if(nm[i]==(-(log(S[i])/log(2)))+1)

nm[i]--;

}

double AA[N];

AA[0]=S[0];

for(int i=1;i

AA[i]=AA[i-1]+S[i];

string MM[N];

for(int i=0;i

{

double tem=0;

double aa=AA[i];

for(int j=0;j

{

tem=aa*2;

if(tem>1)

{

MM[i]+='1';

aa=tem-1;

}

else

{

MM[i]+='0';

aa=tem;

}

}

}

string BB[N];

for(int i=0;i

{

for(int j=0;j

BB[i]+=MM[i][j];

}

cout<<"输出编码"<

for(int i=0;i

cout<

}

void swap(double &x,double &y)

{

double a;

a=x;

x=y;

y=a;

}

实验二.费洛编码.

一、 流程图

二、程序清单

#include

#include

#include

using namespace std;

void dw(int n,int H,int W,double *si,string *m); int main()

{

int N;

cout<<"输入信源个数"<

cin>>N;

double S[N];

cout<<"输入信源概率"<

for(int i=0;i

cin>>S[i];

for(int i=0;i

{

for(int j=i;j

{

if(S[i]

{

double a;

a=S[i];

S[i]=S[j];

S[j]=a;

}

}

}

string MM[N];

dw(N,0,N-1,S,MM);

cout<<"输出编码"<

for(int i=0;i

cout<

}

void dw(int n,int H,int W,double *si,string *m ) {

double sum=0,sm=0;

int a1=W-H;

if(a1>=1)

{

for(int j=H;j<=W;j++)

sum+=*(si+j);

double b[n];

for(int i=H;i<=W;i++)

{

sm+=*(si+i);

b[i]=fabs(2*sm-sum)/sum;

}

int ZH;

double a=b[H];

for(int i=H;i<=W;i++)

if(b[i]<=a)

{

a=b[i];

ZH=i;

}

for(int i=H;i<=W;i++)

{

if(i<=ZH) m[i]+='0';

else m[i]+='1';

}

int nn=n;double *ss;ss=si;

string *mm;mm=m;

if(ZH==H)

dw(nn,ZH+1,W,ss,mm);

else if(ZH==W-1)

dw(nn,H,ZH,ss,mm);

else

{

dw(nn,H,ZH,ss,mm);

dw(nn,ZH+1,W,ss,mm);

}

}

}

相关文档
最新文档