算法导论第三版习题5.3

5.3-1

在进入循环前,先将在整个数组中随机选择一个数至于 A[1] 即可:

PERMUTE-IN-PLACE(A)
1  n=A.length
2  swap A[1] with A[RANDOM(1,n)]
3  for i=2 to n
4    swap A[i] with A[RANDOM(i,n)]

第二步其概率为 1n ,后面一样

5.3-2

不能。虽然这个算法确实不会产生恒等排列,但是不能产生除恒等排列外的任意排列。因为算法第三步使所有 A[i] 不能至于原来的位置。例如,当 n=3 时,除恒等排列外一共应该有 n!1=5 个排列,但该算法只能产生3个排列。

5.3-3

不会。。。

5.3-4

对于 A 中每个元素A[i]来说,当 offset 确定了,则 A[i] 将出现在 i+offset 位置(超过了 n 就减去n),这样由于 offset=RANDOM(1,n) offset 1n 中任意一个的概率都为 1/n ,所以 A[i] 出现在 B 中任何替丁位置的概率都为1/n
但是因为该算法只是在 1n 之间取了一个数,然后将整个数组 A 向右平移了offset个位置,所以一共只能产生 n 个排列,而均匀随机排列一共应该有n!个,所以Aemstrong教授错了

5.3-5

在过程PERMUTE-BY-SORTING中,我们是在1到 n3 n3 个数中随机选择 n 个出来放在数组P中,所以对于P,其中每一个元素都唯一的概率为

Pr=n3(n31)(n3n+1)n3n

由于

n3n+1>n3n2=n2(n1)

所以
Pr[n2(n1)]nn3n

也即
Prn1n=11n

5.3-6

可以对于相同的几个优先级的继续使用PERMUTE-BY-SORTING算法将其再次进行排序

5.3-7

算法实际执行的第一步为

S=RANDOM-SAMPLE(0,n-m)=

第二步中取第一个元素 i=RANDOM(1,nm+1) ,相当于在总集和的前 nm+1 个元素中任选一个元素,概率为
1nm+1

之后娶第二个元素时,总集和中的前 nm+2 个元素中,第一次已经取得了一个元素,故还剩 nm+1 个元素,在这 nm+1 个元素中在任取一个作为第二个元素,其概率也为
1nm+1

对于所有取得的 m 个元素,概率都为
1nm+1

故每个m子集是等可能的,且一共只取 m 次,故值调用RAMDOM函数m

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值