紊乱还是什么?

时间:2010-10-21 04:25:05

标签: algorithm

我正在研究一种紊乱的描述,该紊乱表明“紊乱是一组元素的排列,使得没有一个元素出现在它们的原始位置”。但随后它为一组4个项目提供了9个紊乱。这对我来说没有意义,因为我只从4个项目中获得4个离散集。

例如:

1234 3142 2413 4321

对于根据特定数量的项目,数字与其他任何数字的顺序不同的集合,是否存在与紊乱不同的术语?

有没有人知道用于生成紊乱的算法?

2 个答案:

答案 0 :(得分:4)

九个紊乱是:

2143
2341
2413
3142
3412
3421
4123
4312
4321

如您所见,第1列不包含1,第2列不包含2,依此类推。此外,每一行都有数字1234,并且没有重复项(它们经过排序以便更容易检测)。< / p>


对于它的价值,这是通过蛮力攻击发现的(攻击空间相对较小):

#include <stdio.h>

int main (void) {
    int a, b, c, d, skip;

    for (a = 1; a <= 4; a++) {
        for (b = 1; b <= 4; b++) {
            for (c = 1; c <= 4; c++) {
                for (d = 1; d <= 4; d++) {
                    skip  = (a==1) || (b==2) || (c==3) || (d==4);
                    skip |= (a==b) || (a==c) || (a==d);
                    skip |= (b==c) || (b==d);
                    skip |= (c==d);
                    if (!skip) {
                        printf ("%d%d%d%d\n", a, b, c, d);
                    }
                }
            }
        }
    }
    return 0;
}

答案 1 :(得分:0)

事实证明,我正在寻找一个完整的拉丁方(行完整和/或完整列)。我已经编写了一个算法来检测那些,但不知道这种东西是否有名字。就是这样,谢谢。