0
for(i=1;i<=n;i++)
{
    pick a random index j between 1 and n inclusive;
    swap card[i] and card[j];
}

对于上面的代码,我试图找出原始card[k]在插槽中结束的概率n1/n?我猜是(n-1)/n * 1/(n-1)=1/n。但是你能帮我证明这一点吗?

4

1 回答 1

3

第 k张卡最终在插槽 n 中的概率是 1/n 的原因是因为第 n迭代完全确定哪张卡最终在插槽 n 中!(<---这是一个感叹号,而不是阶乘:-)。

想想看。在循环的最后一次迭代中,您有一些随机排列......并且第 k卡位于某个插槽中。它进入插槽n的概率就是你随机选择第 k张牌的概率。假设您选择概率相同的牌,则该概率为 1/n。

希望这可以帮助。

-汤姆

更新

你可能会认为我做了一个错误的假设。也就是说,您可能想知道……如果第 k卡最终以不同的概率出现在不同的插槽中怎么办?如果“随机洗牌”不是真的随机怎么办?这就是为什么只有最后一次迭代很重要:

令 p i表示第 k 张卡在 n-1 次迭代中位于插槽 i 中的概率即 - 它在结束前位于插槽 i 中)。

那么卡片 k 出现在插槽 n 中(在第 n迭代中)的概率为:

(1/n)p 1 + (1/n)p 2 + ... + (1/n)p n

但请注意,我们可以分解 (1/n),所以我们有:

(1/n)(p 1 + p 2 + ... + p n )

因为这些是概率,很明显 p i的总和(i = 1 到 n)必须等于 1。所以我们只剩下 (1/n)。

这只是更正式地表明在第 n迭代之前事态的随机性确实无关紧要。

于 2009-12-09T06:07:04.217 回答