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

📄 genrm.cc.txt

📁 压缩文件中是Error Correction Coding - Mathematical Methods and Algorithms(Wiley 2005)作者:(Todd K. Moon )的配
💻 TXT
字号:
//////  Program: genrm.cc//  Create a generator for an RM(r,m) code// This is a kind of quick, brute-force (non recursive) way to // do this, that can only be coded explicitly up to a fixed value of r// But it is easy to generalize to others, if desired.////  Todd K. Moon//  Utah State University////  Date:  Jan 14, 2005//  Last update://#include <iostream>using namespace std;#include "matalloc.h"int binom(int n, int k);int main(int argc, char *argv[]){   int r, m;   int n;   int k;   unsigned int i,i1,rc,j,i2,i3,i4;   unsigned int shift,shift1,shift2,shift3,shift4;   r = atoi(argv[1]);   m = atoi(argv[2]);   n = (1<<m);					// code length   k = 1;   for(i = 1; i <= r; i++) {		// compute the code dimension	  k += binom(m,i);   }   cout << "k=" << k << endl;   char **G;   CALLOCMATRIX(G,char,k,n);   rc = 0;						// row count   for(i = 0; i < n; i++) {		//  build the first row	  G[rc][i] = 1;   }   if(r >= 1) {	  for(i1 = 0; i1 < m; i1++) {	// order(1) operations		 shift = (1<<(m-i1-1));		 rc++;		 for(i = 0; i < n; i++) {			if(i & shift) {			   G[rc][i] = 1;			}		 }	  }   }   if(r >= 2) {	  for(i1 = 0; i1 < m; i1++) {	// order(2) operations		 shift1 = (1<<(m-i1-1));		 for(i2 = i1+1; i2 < m; i2++) {			if(i1==i2) continue;			shift2 = (1<<(m-i2-1));			rc++;			for(i = 0; i < n; i++) {			   if((i & shift1) && (i&shift2)) {				  G[rc][i] = 1;			   }			}		 }	  }   }   if(r >= 3) {	  for(i1 = 0; i1 < m; i1++) {	// order(3) operations		 shift1 = (1<<(m-i1-1));		 for(i2 = i1+1; i2 < m; i2++) {			shift2 = (1<<(m-i2-1));			for(i3 = i2+1; i3 < m; i3++) {			   shift3 = (1<<(m-i3-1));			   rc++;			   for(i = 0; i < n; i++) {				  if((i & shift1) && (i&shift2) && (i&shift3)) {					 G[rc][i] = 1;				  }			   }			}		 }	  }   }   if(r >= 4) {	  for(i1 = 0; i1 < m; i1++) {	// order(4) operations		 shift1 = (1<<(m-i1-1));		 for(i2 = i1+1; i2 < m; i2++) {			shift2 = (1<<(m-i2-1));			for(i3 = i2+1; i3 < m; i3++) {			   shift3 = (1<<(m-i3-1));			   for(i4 = i3+1; i4 < m; i4++) {				  shift4 = (1<<(m-i4-1));				  rc++;				  for(i = 0; i < n; i++) {					 if((i & shift1) && (i&shift2) && (i&shift3)						&& (i&shift4)) {						G[rc][i] = 1;					 }				  }			   }			}		 }	  }   }      if(r >= 5) {	  cout << "Not implmented for r in this range\n";	  exit(0);   }      for(j = 0; j < k; j++) {	  for(i = 0;i < n; i++) {		 cout << int(G[j][i]);	  }	  cout << "\n";   }}	        int binom(int n, int k){   double prod = 1;   long int ipod;   double i,j;   if(k > n) return 0;   if(k > n/2) k = n-k;   if(k <= 1) {	  if(k == 0) return 1;	  if(k == 1) return n;   }   for(i = n-k+1, j=1; i <= n; i++,j++) {	  prod *= i/j;   }   ipod = (long int)(prod+0.5);   return ipod;}/*Local Variables:compile-command: "g++ -o genrm -g genrm.cc"End:*/

⌨️ 快捷键说明

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