算法导论第五章5.3随机算法

本文探讨了四种不同的随机排列生成算法,包括RANDOMIZE-IN-PLACE、PERMUTE-WITHOUT-IDENTITY、PERMUTE-WITH-ALL和PERMUTE-BY-CYCLIC。分析了它们的循环不变式、概率性质以及是否能产生均匀随机排列。通过数学论证和概率计算,指出了某些算法在特定情况下的局限性和非均匀性。
摘要由CSDN通过智能技术生成
5.3-1 Marceau教授对引理5.5证明过程中使用的循环不变式表示异议。他对在第1次迭代之前循环不变式是否为真提出质疑。他得理由是人们可以容易地宣城空数组不包含0排列。因此空数组包含0排列的概率应该是0.所以在第1次迭代之前循环不变式无效。请改写过程RANDOMIZE-IN-PLACE,使其相关的循环不变式在第1次迭代之前对非空数组扔适用,并为你的过程修改引理5.5的证明。


RANDOMIZE-IN-PLACE(A)
n=A.length
swap A[1]with A[RANDOM(1,n)]
for i=2 to n
    swap A[i]with A[RANDOM(i,n)]
初始化 考虑正好在第1次循环迭代之前的情况,此时i=2.由循环不变式可知,对每个可能的0排列,子数组A[1..1]包含这个1排列的概率是(n-2+1)!/n!=1/n.子数组A[1..1]是一个非空子数组,并且1排列中有1个元素A[1]。因而,A[1..1]包含1排列的概率是1/n。在第1次循环迭代以前循环不变式成立,保持和终止同原文。


5.3-2 Kelp教授决定写一个过程来随机产生除恒等排列外的任意排列。他提出了如下过程。
PERMUTE-WITHOUT-IDENTITY(A)
n=A.length
for i=1 to n-1
   swap A[i]with A[RANDOM(i+1,n)]


在进行第i次迭代时,元素A[i]是从元素A[i+1]到A[n]中随机选取的。少选取了A[i]这1个元素,而在每次RANDOM时都少选取一个元素,所以必然少了一部分元素进行排列,也就是说少了一些排列方式不能包含所有排列方式。所以肯定就不能包含任意排列。
<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值