我正在使用C++中的程序来演示编码理论(使用线性代码进行纠错)的工作原理。我将奇偶位添加到一串位('字')。这样,我仍然可以看到传输过程中如果某些位已更改(错误检测和纠正)时所使用的信息。要知道的一个重要的事情是两个词之间的最小距离。为了计算这个,我需要编译所有可能的单词列表,并将它们相互比较。如果我的纠错码由长度为n = 6的单词组成,则会有2^6 = 64个可能的组合。我的问题是关于如何生成所有这些可能的单词并将它们存储在一个数组中。所有可能的组合位
这些是什么,这些话看起来像两个实例:
0 0 0 0 0 0
1 0 0 0 0 0
1 1 0 1 0 1
我知道我可以用这样的算法产生两个数字的组合:
for (int i = 1; i <= 5; i++)
for (int j = 2; j <= 5; j++)
if (i != j)
cout << i << "," << j << "," << endl;
然而,这个代码只生成两个数字的组合,并使用除1或0以外的数字。
编辑
我已经创建了几个循环来完成这项工作。这是不是特别优雅:
int bits[64][6] = { 0 };
for (int x = 0; x < 32; x++)
bits[x][0] = 1;
for (int x = 0; x < 64; x += 2)
bits[x][1] = 1;
for (int x = 0; x < 64; x += 4)
{
bits[x][2] = 1;
bits[x + 1][2] = 1;
}
for (int x = 0; x < 64; x += 8)
{
bits[x][3] = 1;
bits[x + 1][3] = 1;
bits[x + 2][3] = 1;
bits[x + 3][3] = 1;
}
for (int x = 0; x < 64; x += 16)
{
for (int i = 0; i < 8; i++)
bits[x + i][4] = 1;
}
for (int x = 0; x < 64; x += 32)
{
for (int i = 0; i < 16; i++)
bits[x + i][5] = 1;
}
环路打印的COUT两个数字,所以你怎么能指望你的代码打印出6个数字0或1的单词? – 2015-02-09 12:17:59