⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 feinei.cpp

📁 费诺编码的步骤: A 将概率按从大到小的顺序排列 B 按编码进制数将概率分组
💻 CPP
字号:
#include<iostream.h>
#include<math.h>
class feinei
{
public:
	feinei(){}
	~feinei(){}
	void input();
	void paixi();
	double jisuanjue(double x);
	void qiuhe(int x,int y);
	void fenzu(int x,int y);
	void output2();
	int getn()
	{
		return n;
	}
	double geta()
	{
		return a[10];
	}
    
	feinei& operator=(feinei &temp)
	{
		n=temp.n;
	    a[10]=temp.a[10];
		he[10]=temp.he[10];
	}
	void output();
	int n;
private:
	double a[10];
	double he[10];
};
int b=0;
int aa=0;
int maa[20][20];
void feinei::input()
{
	cout<<"请输入单符号信源元素个数 :\n";
	cin>>n;
	cout<<"请输入单符号概率  :\n";
	for(int i=0;i<n;i++)
		cin>>a[i];
}
void feinei::paixi()
{
	int i,j,k;
	double x;
	for(i=1;i<n;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 feinei::output()
{
	for(int i=0;i<n;i++)
		cout<<" "<<a[i]<<endl;
}
void feinei::qiuhe(int x,int y)
{
	
	 for(int j=x;j<=y;j++)
	  {
		  he[j]=0;
		  for(int i=x;i<=j;i++)
		  {
			  he[j]+=a[i];
		  }
	 }
}

void feinei::fenzu(int x,int y)
{

   int c;
   
    qiuhe(x,y);
	for(int i=x;i<y;i++)
	{   
		if(jisuanjue(he[i]-he[y]/2)<=jisuanjue(he[i+1]-he[y]/2))
		{c=i;break;}
	}
	for(int yy=x;yy<=c;yy++)
	{
		maa[yy][aa]=2;
	}
	for(yy=c+1;yy<=y;yy++)
	{
		maa[yy][aa]=3;
	}
	cout<<endl; 
    aa++;
	if(c!=x)
	{
	
	fenzu(x,c);
	 
	}

	if(c+1!=y)
	{
	
	fenzu(c+1,y);
	 
	}
	
}
double feinei::jisuanjue(double a)
{
	if(a>=0)
	{return a;}
	else
	{return -a;}
}
void feinei::output2()
{ 
	
	for(int j=0;j<n;j++)
	{
		for(int i=0;i<n-1;i++)
		{   if(maa[j][i]!=0)
			cout<<maa[j][i]-2;
		}
		cout<<endl;
	}
}
void main()
{  
    feinei dui;
	dui.input();
	dui.paixi();
	dui.output();
	dui.fenzu(0,dui.n-1);
	dui.output2();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -