0,1,2…n-1,n 个数中随机取 m 个数,要求 0, 1, n-1,此 n 个数每个数被取到的概率相同:

Knuth 书中的随机化方法,很容易写出:

void genkunth (int n, int m) {
for (int i = 0; i < n; ++i) {
if (bigrand() % (n-i) < m) {
m--;
cout << i << endl;
}
}
}

该算法的特点分析如下:

  • 当 n == m 时,if 判断式恒成立,输出的结果也恒定为 0, 1, 2, … n-1;

    • n-i 每次循环一定发生,m– 未必发生;则 n-i 一定小于 m,对 n-i 取模也必然小于 m;
  • 当 n > m 时,最坏的情况,前 n-m 次随机都不满足条件(if 均不成立),第 n-m+1 次随机必然成立;
  • 故一定可以输出 m 个随机数,
    • 当 n == m, 输出为 0, 1, 2, … n-1
    • 当 n > m, 输出 m 个有序的介于 0-n-1 之间的数;

最新文章

  1. ABP源码分析十:Unit Of Work
  2. Detected both log4j-over-slf4j.jar AND slf4j-log4j12.jar on the class path, preempting StackOverflowError
  3. MySQL(三) —— 约束以及修改数据表
  4. Learning WCF Chapter1 Hosting a Service in IIS
  5. Tran 与 Goto try catch raiserror等浅显应用
  6. Android中的Adapter 详解
  7. 数学之路-python计算实战(14)-机器视觉-图像增强(直方图均衡化)
  8. SUPPORTDIR引用的文件的加入
  9. java围棋游戏源代码
  10. HTML+CSS学习任务清单
  11. [LeetCode] Best Time to Buy and Sell Stock with Transaction Fee 买股票的最佳时间含交易费
  12. wtforms组件使用实例及源码解析
  13. MySQL5.7: Paging using Mysql Stored Proc
  14. Android 屏蔽Power键 Home键
  15. Java中的Arrays类使用详解
  16. 【JVM】5、JVM内存管理机制
  17. python第二十九课——文件读写(读取读取中文字符)
  18. Linux 用户和用户操作
  19. Centos 安装golang beego
  20. POJ3126(KB1-F BFS)

热门文章

  1. AWS EC2 MySQL迁移到RDS案例
  2. Python函数基础-函数调用,定义,参数,递归
  3. stund客户端使用结果说明
  4. find中的-exec参数
  5. 通过css 实现“瀑布流”
  6. nyoj-0737-石子合并(dp)
  7. Uboot中汇编指令
  8. pyhton字符串
  9. eclipse.ini参数配置
  10. OO第三次课程总结分析