对不起,如果这个问题有点奇怪;不过我还不确定在哪里可以问它!
我正在解决一些问题,而且我找到了Fisher-Yates Shuffle,但我想知道我认为这第一次洗牌是否统一?我概率不是最大的......或数学......哈。
这个想法非常简单;对于与数组中的元素一样多的元素,随机选择两个元素并相互交换。
function inPlaceShuffle(arr) {
const floor = 0,
ceil = arr.length - 1;
let i = arr.length;
while (i > 0) {
swap(arr, getRandom(floor, ceil), getRandom(floor, ceil));
i--;
}
return arr;
}
function swap(arr, firstIndex, secondIndex) {
const temp = arr[firstIndex];
arr[firstIndex] = arr[secondIndex];
arr[secondIndex] = temp;
}
function getRandom(floor, ceil) {
floor = Math.ceil(floor);
ceil = Math.floor(ceil);
return Math.floor(Math.random() * (ceil - floor + 1)) + floor;
}
答案 0 :(得分:0)
请注意,循环的每次迭代都会为变量提供n^2
个索引组合,而n次迭代会给出n^(2n)
个变体,但此值不会为n!
均匀地划分n>2
个排列因此,某些排列的概率会高于其他排列。
清楚的例子:
对于{1,2,3}的6个排列有729个结果,729/6 = 121. 5 ,因此排列的可能性变化。