关于随机洗牌

随机洗牌是指随机打乱一个数组中的元素,得到一个新的数组。下面给出两种随机置乱算法的实现思路,两种实现方式的置乱效果没有本质区别。

1.?扰乱算法1:

正确性:?可以用“彩票公平”来证明

2.?中断算法2:

正确性:

假设for循环执行步骤k后,前k个素数已经被正确随机打乱,即对于原数组的前k个元素中的任意一个,它们现在位于a[i],i ∈ [0,k-1]中的概率为1/k,那么,在for循环执行步骤k+1后,前k+1个元素也会被正确随机打乱。因为,从步骤k+1的运算中,很容易知道,对于k+1元素,它出现在[0...k]是1/(k+1),对于前k个元素,经过k+1。(k+1)) = 1/(k+1),其出现在k位置的概率为1/(k+1),所以对于前k个元素,其出现在[0...k]是也。