算法导论 5.3-4

来源:互联网 发布:c语言编程图书管理系统 编辑:程序博客网 时间:2024/05/22 14:01

1 问题

Armstrong教授建议使用下列过程来产生均匀随机排列:PERMUTE-BY-CYCLIC(A)1 n <- length[A]2 offset <- RANDOM(1,n)3 for i <- 1 to n4 do dest <- i + offset5 if dest > n6 then dest <- dest - n7 B[dest] <- A[i]8 return B证明任意元素A[i]出现在B中任何特定位置的概率都是1/n。然后通过证明其结果不是均匀随机排列来表明Armstrong教授错了。

2 分析与解答

这段代码得到的数组B实际是将A随机循环右移n位,显然是不能得到A的所有排列的,所以不是均匀随机排列。

由于P{offset=j,j=1,2,3,..n}=1/n,所以对于A中某一位置i的元素A[i]来说,i+offset为1到n中任意数的概率也是1/n,所以任意元素A[i]出现在B中任何位置的概率都是1/n。



0 0