算法导论第三版习题5.3
2016-01-23 15:37
225 查看
5.3-1
在进入循环前,先将在整个数组中随机选择一个数至于A[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\frac{1}{n},后面一样
5.3-2
不能。虽然这个算法确实不会产生恒等排列,但是不能产生除恒等排列外的任意排列。因为算法第三步使所有A[i]A[i]不能至于原来的位置。例如,当n=3n=3时,除恒等排列外一共应该有n!−1=5n!-1=5个排列,但该算法只能产生3个排列。5.3-3
不会。。。5.3-4
对于AA中每个元素A[i]A[i]来说,当offsetoffset确定了,则A[i]A[i]将出现在i+offseti+offset位置(超过了nn就减去nn),这样由于offset=RANDOM(1,n)offset=RANDOM(1,n),offsetoffset取1−n1-n中任意一个的概率都为1/n1/n,所以A[i]A[i]出现在BB中任何替丁位置的概率都为1/n1/n。但是因为该算法只是在1−n1-n之间取了一个数,然后将整个数组AA向右平移了offsetoffset个位置,所以一共只能产生nn个排列,而均匀随机排列一共应该有n!n!个,所以Aemstrong教授错了
5.3-5
在过程PERMUTE-BY-SORTING中,我们是在1到n3n^3这n3n^3个数中随机选择nn个出来放在数组P中,所以对于P,其中每一个元素都唯一的概率为Pr=n3⋅(n3−1)⋅⋯⋅(n3−n+1)n3nPr=\frac{n^3\cdot(n^3-1)\cdot\cdots\cdot(n^3-n+1)}{n^{3n}}
由于
n3−n+1>n3−n2=n2(n−1)n^3-n+1\gt n^3 -n^2=n^2(n-1)
所以
Pr≥[n2(n−1)]nn3nPr\ge\frac{[n^2(n-1)]^n}{n^{3n}}
也即
Pr≥n−1n=1−1nPr\ge\frac{n-1}{n}=1-\frac{1}{n}
5.3-6
可以对于相同的几个优先级的继续使用PERMUTE-BY-SORTING算法将其再次进行排序5.3-7
算法实际执行的第一步为S=RANDOM-SAMPLE(0,n-m)=∅S=\text{RANDOM-SAMPLE(0,n-m)}=\emptyset
第二步中取第一个元素i=RANDOM(1,n−m+1)i=RANDOM(1,n-m+1),相当于在总集和的前n−m+1n-m+1个元素中任选一个元素,概率为1n−m+1\frac{1}{n-m+1}
之后娶第二个元素时,总集和中的前n−m+2n-m+2个元素中,第一次已经取得了一个元素,故还剩n−m+1n-m+1个元素,在这n−m+1n-m+1个元素中在任取一个作为第二个元素,其概率也为1n−m+1\frac{1}{n-m+1}
对于所有取得的mm个元素,概率都为1n−m+1\frac{1}{n-m+1}
故每个m子集是等可能的,且一共只取mm次,故值调用RAMDOM函数mm次
相关文章推荐
- 转:ios的crash框架方法论
- OSPF的stub、完全stub及NSSA区域各自的特点
- 常用的正则表达式集锦
- centos7之docker使用systemd
- OSPF路由过滤和LSA过滤的区别,以及实现方法
- python--列表 、元组、字典
- 加权平均数以及方差
- 2413: C语言习题 折半查找
- Java内部类
- android高级框架xUtils之HttpUtils
- 对使命召唤OL游戏中队友能相互救治的动作设定的感慨
- activiti部署、执行,完成简单示例
- OSPF路由协议建立邻居关系、邻接关系和路由汇聚过程中的表类型、包类型及状态类型
- (进阶篇)每日一更:函数式编程(lamda)
- tinyxml 使用指导
- 利用KVC机制,为textField设置字体属性
- 智能路由器安全特性分析
- 1.5 MySql建表
- RTL-SDR安装
- 【CODEFORCES】 B. Queue