📄 新建 文本文档.txt
字号:
#include<iostream.h>
#include<math.h>
const int n=2;
const int m=2;
double a[n][m];
double b[n];
double c[m];
double sum;
double danHb;
double Lianhe;
double Hc;
void input();
void output();
void panduan();
void LianheH();
void BH();
void CH();
void QiTA();
void main()
{
input();
output();
panduan();
LianheH();
BH();
CH();
QiTA();
}
void input()
{
cout<<"请输入联合概率密度 :\n";
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>a[i][j];
}
void panduan()
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
sum+=a[i][j];
if(sum==1.0)
cout<<"将执行下面操作:"<<endl;
else if(sum!=1.0)
{
cout<<" 输入错误,请重新输入 :"<<endl;
input();
}
}
void output()
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cout<<" "<<a[i][j];
cout<<endl;
}
void LianheH()
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
Lianhe+=a[i][j]*(log(a[i][j])/log(2))*(-1) ;
cout<<"联合熵为 "<<Lianhe<<endl;
}
void BH()
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
b[i]+=a[i][j];
for( i=0;i<n;i++)
cout<<" "<<b[i]<<endl;
danHb=b[0]*(log(b[0])/log(2))*(-1)+b[1]*(log(b[1])/log(2))*(-1);
cout<<"H(B)熵为 "<<danHb<<endl;
}
void CH()
{
for(int j=0;j<m;j++)
for(int i=0;i<n;i++)
c[j]+=a[i][j];
for( j=0;j<m;j++)
cout<<" "<<c[j]<<endl;
Hc=c[0]*(log(c[0])/log(2))*(-1)+c[1]*(log(c[1])/log(2))*(-1);
cout<<"H(C)熵为 "<< Hc<<endl;
}
void QiTA()
{
double Fu,XY,YX;
Fu=danHb+Hc-Lianhe ;
XY=danHb-Fu;
YX=Hc-Fu;
cout<<"B条件C的熵, C条件B的熵,互信息量分别为 "<<XY<<" "<<YX<<" "<<Fu<<endl;
}
#include<iostream.h> //用于求有关已知一个随机事件的概率和条件概率的题型
#include<math.h>
const int n=2; //n和m表示两个随机事件的离散信源
const int m=2;
double a[n][m]; //条件概率分布
double Lianhe[n][m]; //联合概率分布
double b[n]; //X的概率分布
double c[m]; //Y的概率分布
double Lianheshang; //联合熵
double danHX; //H(x)
double Xtiaojian; //H(Y/X)
double Ytiaojian; //H(X/Y)
double danHy; //H(Y)
double Huxin; //I(X;Y)
void input(); //用于输入数据
void QiTai(); //用于计算其他概率
void LianheH(); //用于计算联合熵
void BH(); //用于计算H(x)
void Tiaojian(); //用于计算H(Y/X)
void Yshang(); //用于计算H(Y)
void QiTashang(); //用于计算H(X/Y)和I(X;Y)
void main()
{
input();
QiTai();
LianheH();
BH();
Tiaojian();
Yshang();
QiTashang();
}
void input()
{
cout<<"请输入事件X的概率密度 :\n";
cin>>b[0];
cout<<"请输入x1条件下y1的概率密度 :\n";
cin>>a[0][0];
cout<<"请输入x2条件下y1的概率密度 :\n";
cin>>a[1][0];
}
void QiTai()
{
b[1]=1-b[0];
a[0][1]=1-a[0][0];
a[1][1]=1-a[1][0];
for(int i=0;i<n;i++)
{
for(int j=0;j<m;j++)
Lianhe[i][j]=b[i]*a[i][j];
}
cout<<"联合概率分布为:"<<endl;
for( i=0;i<n;i++)
for(int j=0;j<m;j++)
cout<< Lianhe[i][j]<<endl;
}
void BH()
{
for(int i=0;i<n;i++)
danHX+=b[i]*(log(b[i])/log(2))*(-1);
cout<<"H(X)熵为 "<<danHX<<endl;
}
void LianheH()
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
Lianheshang+=Lianhe[i][j]*(log(Lianhe[i][j])/log(2))*(-1) ;
cout<<"联合熵为 "<<Lianheshang<<endl;
}
void Tiaojian()
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
Xtiaojian+=Lianhe[i][j]*(log(a[i][j])/log(2))*(-1) ;
cout<<"H(Y/X)为 "<<Xtiaojian<<endl;
}
void Yshang()
{
for(int j=0;j<m;j++)
for(int i=0;i<n;i++)
c[j]+=Lianhe[i][j];
cout<<"Y的概率分布为 :"<<endl;
for(int i=0;i<n;i++)
cout<<c[i]<<endl;
danHy=c[0]*(log(c[0])/log(2))*(-1)+c[1]*(log(c[1])/log(2))*(-1);
cout<<"H(Y)熵为 "<<danHy<<endl;
}
void QiTashang()
{
Ytiaojian=Lianheshang-danHy;
Huxin=danHX+danHy-Lianheshang;
cout<<"H(X/Y)为 "<<Ytiaojian<<endl;
cout<<"I(X;Y)为 "<<Huxin<<endl;
}
#include<iostream.h> //用于计算已知联合概率题型
#include<math.h>
const int n=2; //n和m表示两个随机事件的离散信源
const int m=2;
double a[n][m]; //联合概率分布
double b[n]; //X的概率分布
double c[m]; //Y的概率分布
double sum; //用于判断输入的联合概率是否正确
double danHb; //H(x)
double Lianhe; //联合熵
double Hc; //H(Y)
void input(); //用于输入数据
void output(); //用于输出数据
void panduan(); //用于判断输入的联合概率是否正确
void LianheH(); //用于计算联合熵
void BH(); //用于计算H(x)
void CH(); //用于计算H(Y)
void QiTA(); //用于计算H(Y/X),H(X/Y)和(9X;Y)
void main()
{
input();
output();
panduan();
LianheH();
BH();
CH();
QiTA();
}
void input()
{
cout<<"请输入联合概率密度 :\n";
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cin>>a[i][j];
}
void panduan()
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
sum+=a[i][j];
if(sum==1.0)
cout<<"将执行下面操作:"<<endl;
else if(sum!=1.0)
{
cout<<" 输入错误,请重新输入 :"<<endl;
input();
}
}
void output()
{ cout<<"联合概率分布"<<endl;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
cout<<" "<<a[i][j];
cout<<endl;
}
void LianheH()
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
Lianhe+=a[i][j]*(log(a[i][j])/log(2))*(-1) ;
cout<<"联合熵为 "<<Lianhe<<endl;
}
void BH()
{
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
b[i]+=a[i][j];
cout<<"X的概率分布为 "<<endl;
for( i=0;i<n;i++)
cout<<b[i]<<endl;
danHb=b[0]*(log(b[0])/log(2))*(-1)+b[1]*(log(b[1])/log(2))*(-1);
cout<<"H(X)熵为 "<<danHb<<endl;
}
void CH()
{
for(int j=0;j<m;j++)
for(int i=0;i<n;i++)
c[j]+=a[i][j];
cout<<"Y的 概率分布为 "<<endl;
for( j=0;j<m;j++)
cout<<c[j]<<endl;
Hc=c[0]*(log(c[0])/log(2))*(-1)+c[1]*(log(c[1])/log(2))*(-1);
cout<<"H(Y)熵为 "<< Hc<<endl;
}
void QiTA()
{
double Fu,XY,YX;
Fu=danHb+Hc-Lianhe ;
XY=danHb-Fu;
YX=Hc-Fu;
cout<<"X条件Y的熵, Y条件X的熵,互信息量分别为 "<<XY<<" "<<YX<<" "<<Fu<<endl;
}
#include<iostream.h>
#include<math.h>
double a[10]; //用于存储符号的概率
int n; //请输入单符号信源元素个数
double b[10]; //用于存储码字的概率
int k[10]; //用于存储Ki的K直
int c[10]; //用于存储二进吗
void input(); //输入数据函数
void paixi(); //对概率排序
void output(); //输出函数
void bgailui(); //用于求码字的概率
void kjisuan(); //用于求Ki的K直
void bbianma(); //用于编码
void panduan(); //用于对输入数据判断,避免符号的总和概率》1
void main()
{
input();
panduan();
paixi();
output();
bgailui();
kjisuan();
bbianma();
}
void input()
{
cout<<"请输入单符号信源元素个数 :\n";
cin>>n;
cout<<"请输入单符号概率 :\n";
for(int i=1;i<n+1;i++)
cin>>a[i];
}
void panduan()
{
double sum=0;
for(int i=0;i<n+1;i++)
sum+=a[i];
cout<<""<<sum<<endl;
if(sum==1.0)
cout<<"将执行下面操作:"<<endl;
else if(sum!=1.0)
{
cout<<" 输入错误,请重新输入 :"<<endl;
input();
}
}
void paixi()
{
int i,j,k;
double x;
for(i=1;i<n+1;i++)
{
k=i-1;
for(j=i;j<n+1;j++)
if(a[j]>a[k])
k=j;
x=a[i-1];a[i-1]=a[k];a[k]=x;
}
}
void output()
{
for(int i=0;i<n;i++)
cout<<" "<<a[i]<<endl;
}
void bgailui()
{
b[0]=0;
for(int i=0;i<n;i++)
{
b[i+1]=b[i]+a[i];
}
cout<<"累加概率分布为"<<endl;
for( i=0;i<n;i++)
cout<<" "<<b[i]<<endl;
}
void kjisuan()
{
for(int i=0;i<n;i++)
{
if((-1)*log(a[i])/log(2)==int((-1)*log(a[i])/log(2)))
k[i]=int((-1)*log(a[i])/log(2));
else
k[i]=int((-1)*log(a[i])/log(2))+1;
}
for(i=0;i<n;i++)
cout<<" "<<k[i]<<endl;
}
void bbianma()
{
double x;
for(int i=0;i<n;i++)
{
x=b[i];
for(int j=0;j<n;j++)
{
if(x<=0.5)
{
if(x==int(x))
x=0;
else
x=x*2;
c[j]=int(x);
}
else if(x>0.5)
{
if(x==int(x))
x=0;
else
x=(x-int(x))*2;
c[j]=int(x);
}
}
for(j=0;j<k[i];j++)
cout<<""<<c[j];
cout<<endl;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -