我的问题与算法有关,而不是与编程语言有关,所以请随意使用任何语言来解释我。
我有一个数组,我想以随机方式对其进行洗牌,无论如何洗牌当时必须涉及 2 个元素。 所以,如果我有:
1 2 3 4 5 6 7 8 9 10
1-2,3-4,5-6
等对必须一起洗牌导致,例如,以下
3 4 7 8 9 10 1 2 5 6
最佳答案
它与普通随机播放相同,只是您将“随机播放数组”视为实际数组大小的一半。意思是 1,2,3,4,5,6
实际上是一个数组 1 2, 3 4, 5 6
。
这是一些使用 fisher yates 的伪代码:
To shuffle an array a of n elements (indices 0..n-1) in pairs of 2:
for i from (n − 1) / 2 downto 1 do
j ← random integer with 0 ≤ j ≤ i
exchange a[j * 2] and a[i * 2]
exchange a[j * 2 + 1] and a[i * 2 + 1]
关于algorithm - 将数组 2 个元素按 2 个随机洗牌,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14874408/