算法导论 5.3-3
来源:互联网 发布:小米盒子看网络电视吗 编辑:程序博客网 时间:2024/06/03 02:35
1 问题
假设不是将元素A[i]与子数组A[i…n]中的随机一个元素相交换,而是将它与数组任何位置上的随机元素相交换:
PERMUTE-WITH-ALL(A)1 n <- length[A]2 for i <- 1 to n3 do swap A[i] <-> A[RANDOM(1, n)]
这段代码会产生均匀随机排列吗?为什么会?或为什么不会?
2 分析与解答
显然代码肯定可以产生A中元素的全排列,但是产生的排列中有一些是相同的,这样就要考察A中元素的每一个全排列的重复次数是否相同,如果相同就能产生,反之就不能。
假设A=[1, 2, 3],那么分析第2,3行的for循环,有下面的产生链:
由图可见,
- 算法导论 5.3-3
- 算法导论 5.3-3
- 算法导论 练习题 5.3-3
- 算法导论 5.3-1
- 算法导论 5.3-2
- 算法导论 5.3-4
- 算法导论 5.3-5
- 算法导论 5.3-6
- 算法导论 3-3
- 算法导论 5.1-3
- 算法导论学习3
- 算法导论14.3-3
- 算法导论15.4-3
- 算法导论22.1-3
- 算法导论15.1-3
- 算法导论-16.1-3
- 算法导论1.1-3
- 算法导论 1.2-3
- Android如何防止apk程序被反编译
- iOS ARC 和 非ARC 互转
- Android 中文件类型与MIME的匹配表
- Eclipse导入项目,java文件中文乱码的解决方案
- 标准体重
- 算法导论 5.3-3
- WinCE 6.0下的编译选项-“Advanced Build Commands”
- Objective-C——消息、Category和Protocol
- hdu 2710 Max Factor
- ubuntu12.04samba服务器配置
- MD5+ENUM DEMO
- C#获取网页源码
- 使用Gradle快速构建Java项目
- shell 的cut 命令用法