,这类码构造简单的构造,结构特性丰富。对于任意整数m和r,0<r<m,存在一个二进制r阶RM码,记为RM(r,m),其参数如下:码长:n=2;维数:k(r,m)=1+mcm+cm+.......+cm12r最小距离:d=(r,m)成如下:V0={1,1,...........................................1}Vi={0,.....0,1.....1,0.....0,..........,1......1}ViVj={Vi0*Vj0,..............,Vi(n-1)*Vj(n-1)}.....一直到r次相乘即Grm(r,m)={V0,V1,........,Vm,V1V2,........Vm-1Vm.......至r次相乘}++编写Grm(r,m)思想如下::利用for循环m次,每次乘以二令n的初值为1for(i=1;i<=m;i++)n=n*2;维数的计算:先定义一个递归函数fac1(inta)完成一个整数的阶乘计算;在定义一个函数fac2()完成排列组合的计算,其中调用fac1(inta)函数;代码如下:intfac1(inta){if(a==1)return1;elsereturna*fac1(a-1);}intfac2(inta,intb){returnfac1(a)/fac1(b)/fac1(a-b);}令k的初值为1,利用for循环r次,累加每次排列组合数:for(i=1;i<=r;i++){k=k+fac2(m,i);}:对于V0向量直接用赋除值的方法:for(j=0;j<n;j++){*(*(g+0)+j)=1;cout<<*(*(g+0)+j)<<"";}对于Vi向量生成方法:先算出码长2(i-1)整除n,将码长分成多少组0,1交替的序列;对于Vi序列中的第J个数整除2(i-1),得的商为奇数是,则第J个数为1,否则为0;for(i=1;i<=m;i++){a=(int)pow(2,i-1);b=n/a;for(j=0;j<n;j++){if((j/a)%2==0)*(*(g+i)+j)=0;else*(*(g+i)+j)=1;cout<<*(*(g+i)+j)<<"";}对于ViVj向量的生成方法:利用三个for循环,第一个变量i为控制Vi向量不变,通过第二个变量j的自加,分别使异于Vi的向量与Vi相乘,第三个变量是控制Vi和Vj的第a个元素相乘。其代码如下:for(i=1;i<m;i++){for(j=i+1;j<=m;j++){for(a=0;a<n;a++){*(*(g+m+i)+a)=(*(*(g+i)+a))*(*(*(g+j)+a));cout<<*(*(g+m+i)+a)<<"";}cout<<endl;}}}下面以m=4,r=2为例,其总的代码如下:#include<>#include<>voidmain(){inta,b,m=4,r=2,n=1,k=1;inti,j;//cin>>m>>r;//cout<<"m="<<m<<""<<"r="<<r<<endl;for(i=1;i<=m;i++)n=n*2;//计算
RM码的生成矩阵1 来自淘豆网www.taodocs.com转载请标明出处.