<算法导论>练习5.3

5.3-1
把第一种情况单独列出来即可。

5.3-2
无法实现,这个题前面好像有,比如想由A[1,2,3]生成[3,2,1]是无法实现的,因为i是递增的,所以第一步只能和3交换得到[3,2,1],还会进行第二步的交换,生成[3,1,2].所以不能生成任意排列。

5.3-3

这种方法并不能产生均匀的随机排列。
以n=3为例,for循环的每次迭代都会把第i个元素和第[1,2,3]之中的某个进行交换,所以第i次迭代会有3种不同情况。那么整个迭代经过排列组合一共会有 3 3 = 27 3^3=27 33=27种情况,而3个不同的数的全排列一共有 3 ! = 6 3!=6 3!=6种,而27无法整除6,所以产生的排列一定不会是等概率的。

5.3-4

这种做法不会改变元素间的相对位置,而是对整个序列进行了圆周移位。比如:
A=[1,2,3]
offset=1时,B=[3,1,2]
offset=2时,B=[2,3,1]
offset=3时,B=[1,2,3]
永远不会产生[1,3,2]这种情况,所以不是均匀随机排列。

5.3-5
在题中的程序里生成的随机数的范围是[1,n^3],对于第i个数,(假设前i-1个数均不相同),则第i个数唯一的概率是: 1 − ( i − 1 ) / n 1-(i-1)/n 1(i1)/n,那么所有数都不相同的概率是:
p = 1 ( 1 − 1 n 3 ) ( 1 − 2 n 3 ) . . . > = ( 1 − n n 3 ) ( 1 − n n 3 ) . . . = ( 1 − 1 n 2 ) n > = 1 − 1 n \begin{aligned} p&=1(1-\frac1{n^3})(1-\frac2{n^3})...\\ &>=(1-\frac{n}{n^3})(1-\frac{n}{n^3})...\\ &=(1-\frac{1}{n^2})^n\\ &>=1-\frac1n \end{aligned} p=1(1n31)(1n32)...>=(1n3n)(1n3n)...=(1n21)n>=1n1
5.3-6
可以把数组p先赋值为各不相同的数,然后随机交换顺序。

def PERMUTE_BY_SORTING(A):
	p=[i for i in range(1,n+1)]  #建立一个p数组,内容从1...n
	for i in range(1,n+1):
		swap p[i] with p[RANDOM(i,n)]  #应该自己写出swap和random函数
	然后使用关键字对p,对A进行排序。
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值