重复使用randperm直到达到标准,总是在连续两次运行中产生重复的结果

Repeatedly using randperm until a standard is met always gives duplicate results on two consecutive runs

提问人:Shaobin Jiang 提问时间:9/10/2023 更新时间:9/10/2023 访问量:23

问:

我们在 Matlab 中有一个函数,它生成一个幻方。但是,它总是给出相同的正方形,而给定维度可以有多个可能的魔方。magic

现在,我想随机生成一个给定维度的魔方,这里有一段代码:

while true
    nums = randperm(9);
    A = reshape(nums, 3, 3);
    if all(sum(A, 1) == 15) && all(sum(A, 2) == 15) && sum(diag(A)) == 15 && sum(diag(fliplr(A))) == 15
        break;
    end
end
disp(A);

它几乎可以正常工作。它生成魔方足够好。但是,在连续运行中,它给了我相同的矩阵:

>> ranMagic
     8     1     6
     3     5     7
     4     9     2

>> ranMagic
     8     1     6
     3     5     7
     4     9     2

>> ranMagic
     6     7     2
     1     5     9
     8     3     4

>> ranMagic
     6     7     2
     1     5     9
     8     3     4

>> ranMagic
     6     1     8
     7     5     3
     2     9     4

>> ranMagic
     6     1     8
     7     5     3
     2     9     4

>> ranMagic
     6     7     2
     1     5     9
     8     3     4

>> ranMagic
     6     7     2
     1     5     9
     8     3     4

>> ranMagic
     2     9     4
     7     5     3
     6     1     8

>> ranMagic
     2     9     4
     7     5     3
     6     1     8

>> ranMagic
     2     9     4
     7     5     3
     6     1     8

>> ranMagic
     6     7     2
     1     5     9
     8     3     4

>> ranMagic
     6     7     2
     1     5     9
     8     3     4

>> ranMagic
     8     1     6
     3     5     7
     4     9     2

>> ranMagic
     8     1     6
     3     5     7
     4     9     2

注意前两个矩阵是如何相同的,然后是第三个和第四个矩阵,然后是第五个和第六个矩阵......虽然 3D 魔方的数量确实很少,只有 8 种可能的替代品,但这对我来说不仅仅是一个巧合。为什么会这样?

MATLAB 随机 随机种子

评论

1赞 Cris Luengo 9/10/2023
我毫不犹豫地相信这是巧合。
0赞 James Tursa 9/11/2023
@Shaobin 你很容易把它放在一个大量试验的循环中(例如,1M),看看这是否是巧合。

答: 暂无答案