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

📄 bm.cpp

📁 该BM算法用来求二元域上长度为11的序列的线性综合解
💻 CPP
字号:
#include <iostream.h>
const int N=11;
main()
{
	int max(int x,int y);
	int a[N],f[N+1][N+1],fm[N+1][N+1];
	int d[N],l[N+1];
	int i,j,m,n,t,s,n0;
	cout <<"input the binary number:";
	for(i=0;i<N;i++)
		cin >>a[i];
	cout <<'\n';
	for(i=0;i<=N;i++)
		for(j=0;j<=N;j++)
		{
			f[i][j]=0;
		    fm[i][j]=0;
		}
    i=0;
	while(a[i]==0) i++;
	    n0=i;                           
		cout<<"n0="<<n0<<endl;
   	for(i=0;i<n0;i++) d[i]=0;
        d[n0]=a[n0];                    
		cout<<"d[n0]="<<d[n0]<<endl;
	for(i=0;i<=n0;i++) l[i]=0;
	    l[n0+1]=n0+1;                   
		cout<<"l[n0+1]="<<l[n0+1]<<endl;
	for(i=0;i<=n0+1;i++) f[i][0]=1;
	    f[n0+1][n0+1]=d[n0];
    
	for(n=n0+1;n<N;n++)
	{
		d[n]=a[n];
		for(i=1;i<=n;i++)
			d[n]+=f[n][i]*a[n-i];
		d[n]=(d[n]%2==0?0:1);
    
		if(d[n]==0) 
		{
			for(j=0;j<=N;j++)
				f[n+1][j]=f[n][j];
			l[n+1]=l[n];
		}
		if(d[n]!=0)
		{
			i=n;
			while(l[i-1]==l[i])
				i--;
			m=i-1;               
			cout <<"m="<<m<<","; 
		    for(j=0;j<=N;j++)
				fm[m][j]=0;
			for(j=0;j<=N;j++)
			{   
				if(f[m][j]!=0)
				    fm[m][j+(n-m)]=f[m][j];
			}
           	for(j=0;j<N;j++)
			{
				f[n+1][j]=f[n][j]+fm[m][j]*d[n];
				f[n+1][j]=(f[n+1][j]%2==0?0:1);
			}
				l[n+1]=max(l[n],n+1-l[n]); 
		}
	}      
	cout <<'\n';
	for(i=0;i<N;i++)
		cout <<"d["<<i<<"]="<<d[i]<<endl;
    for(i=0;i<N+1;i++)
	{
		for(j=0;j<N-1;j++)
		    cout<<f[i][j]<<",";
            cout<<'\n';
	}
	for(i=0;i<=N;i++)
    	cout <<"l("<<i<<")="<<l[i]<<endl;
    for(j=0;j<N;j++)
        cout <<f[N][j]<<",";
	    cout <<endl;
}
int max(int x,int y)
{
	return(x>y?x:y);
}

⌨️ 快捷键说明

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