生成k个不同的随机数(1-n)
2014-06-10 14:43
162 查看
《编程珠玑》习题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)
(题目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 ; 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; }
相关文章推荐
- 随机数与排列组合:生成1亿个随机的不同16位数
- java 生成一组不同的随机数(不重复)
- 生成N个不同的随机数(C++,范围0~N-1)
- 生成300个不同的随机数
- 生成300个不同的随机数的SQL语句
- c#编程实现生成指定范围的不同的随机数
- c#生成一组不同的随机数的方法
- C#生成不同随机数
- 随机生成k个范围为1-n的随机数,其中有多少个不同的随机数?
- c#生成一组不同的随机数的方法
- C++在1秒内生成不同的随机数
- asp.net下生成99个不同的随机数
- java生成不同的随机数
- 生成5个不同的随机数;
- 生成十个完全不同的随机数并排序
- 【JavaScript】生成一段序列不同的随机数
- 生成300个不同的随机数的SQL语句
- java生成4个不同的随机数
- 随机生成一个对称矩阵,并输出。(究极版本,可以每一次都改变矩阵的随机数且不同,采用do while退出条件循环)
- asp.net下生成99个不同的随机数