我正在研究一种紊乱的描述,该紊乱表明“紊乱是一组元素的排列,使得没有一个元素出现在它们的原始位置”。但随后它为一组4个项目提供了9个紊乱。这对我来说没有意义,因为我只从4个项目中获得4个离散集。
例如:
1234 3142 2413 4321
对于根据特定数量的项目,数字与其他任何数字的顺序不同的集合,是否存在与紊乱不同的术语?
有没有人知道用于生成紊乱的算法?
答案 0 :(得分:4)
九个紊乱是:
2143
2341
2413
3142
3412
3421
4123
4312
4321
如您所见,第1列不包含1
,第2列不包含2
,依此类推。此外,每一行都有数字1
,2
,3
和4
,并且没有重复项(它们经过排序以便更容易检测)。< / 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)
事实证明,我正在寻找一个完整的拉丁方(行完整和/或完整列)。我已经编写了一个算法来检测那些,但不知道这种东西是否有名字。就是这样,谢谢。