假设我们不是将元素A[ i ]与子数组A [ i ... n ]中的一个随机元素交换,而是将它与数组任何位置上的随机元素交换:
PERMUTE-WITH-ALL(A)
1 n = A.length
2 for i = 1 to n
3 swap A[ i ] with A[ RANDOM(1, n)]
这段代码会产生一个均匀随机排列吗?为什么会或为什么不会?
对某些特定的n,该法有可能产生均匀随机排列,如1, 2
但考虑一般情况,在执行伪代码2、3行后,将产生 n^n 种结果,但排列有 n!种
因此需要 (n - 1)!整除 n^(n - 1)
但实际上将 n^(n - 1) 写成二项形式,即:
容易看出 即 (n - 1) 就不能整除 n^(n - 1)
因此 n = 1 or 2时会产生均匀随机排列,其余不会