生成k个不同的随机数(1-n)
来源:互联网 发布:mac更新系统进度条不动 编辑:程序博客网 时间:2024/05/19 22:58
《编程珠玑》习题1.4:如果认真考虑了习题3,你将会面对生成小于n且没有重复的k个整数的问题。最简单的方法就是使用前k个正整数。这个极端的数据集合将不会明显的改变位图方法的运行时间,但是可能会歪曲系统排序的运行时间。如何生成位于0至n - 1之间的k个不同的随机顺序的随机整数?尽量使你的程序简短高效。
(题目copy from http://blog.chinaunix.net/uid-21228455-id-2406483.html)
我找到最好的方法:Fisher-Yates shuffle
(http://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle)
#include <iostream>#include <ctime>#include <cstdlib>#include <cstdio>using namespace std;#define N 10/*To shuffle an array a of n elements (indices 0..n-1): for i from n − 1 downto 1 do j ← random integer with 0 ≤ j ≤ i exchange a[j] and a[i]*/void generateRandom1(int *random){ for(int i = N-1; i >= 1; --i){ int j = rand()%(i+1); std::swap(random[i], random[j]); }}int main() { int random[N]; for(int i = 0;i < N; ++i) random[i] = i; srand(time(NULL)); generateRandom1(random); for(int i = 0;i < N; ++i) cout << random[i] << " "; cout << endl; return 0;}
0 0
- 生成k个不同的随机数(1-n)
- 【编程珠玑】生成k个1-n的随机数
- 生成1-n中的k个不相同的随机数
- 生成k个不同的随机数,从m到n,并输出最大值的程序代码
- 生成k个小于n的互不相同的随机数
- 生成k个小于n的互不相同的随机数
- 生成k个小于n的互不相同的随机数
- 在n不确定的情况下生成k个随机数
- 生成N个不同的随机数(C++,范围0~N-1)
- C++生成n个指定1到 n 不同的随机数
- 生成99个不同的随机数
- C++生成54个不同的随机数
- 生成5个不同的随机数;
- 生成N个[s,e)范围的随机数
- 生成互不相同的N个随机数
- 生成n以内的m个随机数
- 生成N个不重复的随机数
- 生成N个不相等的随机数
- 使用wireshark来分析tcp的三次握手和四次断开连接
- Android屏幕density, dip等相关概念总结
- Tomcat配置,跳转,安全
- 海量数据处理:十道面试题与十个海量数据处理方法总结
- Redesign Your App for iOS 7 之 页面布局
- 生成k个不同的随机数(1-n)
- Android示例之Animation中setFllAfter和setFillBefore的设置
- Android中shape的使用
- Axure RP Extension for Chrome安装
- 如何使用KeyChain保存和获取UDID
- Android中dip、dp、sp、pt和px的区别
- 解决问题E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录
- datagrid两次刷的解决方法
- 常用的电子原件