生成k个小于n的互不相同的随机数
来源:互联网 发布:vue.js 2.0 离线文档 编辑:程序博客网 时间:2024/05/21 18:45
《编程珠玑》习题1.4:如果认真考虑了习题3,你将会面对生成小于n且没有重复的k个整数的问题。最简单的方法就是使用前k个正整数。这个极端的数据集合将不会明显的改变位图方法的运行时间,但是可能会歪曲系统排序的运行时间。如何生成位于0至n - 1之间的k个不同的随机顺序的随机整数?尽量使你的程序简短高效。
如下的程序产生1-n的不重复的随机数:
void swap(int *a, int *b) {int tmp = *a;*a = *b;*b = tmp;}void produce (int a[], int n) {int i; //对数组a依次赋一个不同的值 for (i = 0; i < n + 1; i++) {a[i] = i + 1;}srand((int)time(0)); //下面的语句用于产生n个不同的随机数,存于数组的0到n-1位中 // i + rand() % (n - i)产生一个范围i到n的随机数 //那么将这个下标的数组数据和以i为下标的数组数据swap肯定不重复 for (i = 0; i < n; i++) {swap(&a[i], &a[i + rand() % (n - i)]);}}上面的算法复杂度为O(n);
在文章Libnids的哈希函数中,libnids的void init_hash () 函数也提供了一种产生0到11之间不重复随机数的方法,其复杂度为O(n ^ 2).
参考:
http://blog.chinaunix.net/uid-21228455-id-2406483.html
http://blog.csdn.net/wdzxl198/article/details/12000091
0 0
- 生成k个小于n的互不相同的随机数
- 生成k个小于n的互不相同的随机数
- 生成k个小于n的互不相同的随机数
- 生成互不相同的N个随机数
- 生成互不相同的随机数
- 生成1-n中的k个不相同的随机数
- 生成互不相同随机数的一种算法
- 生成互不相同随机数的一种算法
- 产生9个互不相同的随机数
- C#在一段数字区间内随机生成若干个互不相同的随机数
- 生成小于n且没有重复的k个整数
- 生成小于n且没有重复的k个整数
- 用C#生成足够随机的互不相同的随机数
- C#生成指定数目的互不相同的随机数
- C#生成指定数目的互不相同的随机数
- 生成互不相同随机数的两种算法
- 【编程珠玑】生成k个1-n的随机数
- 生成k个不同的随机数(1-n)
- SSD 之WL磨损平衡
- Linux iptables参数详解
- OOP 面向对象编程
- UILabel 自动换行 和支持换行符
- qsort和sort的详解和比较函数的区别
- 生成k个小于n的互不相同的随机数
- jQuery EasyUI 1.4.2 离线简体中文API文档 含完整开发工具包+皮肤+扩展+演示
- IOS对日期进行排序
- 2 注册微信公共账号
- Sencha touch中Ext.data.Store获取json串中key值的方法
- SSD 之LBA和PBA
- 根文件系统制作的lib库必须添加的文件
- tomcat问题总结之-连接超时-maximum-active-time
- 分享下多年积累的对JAVA程序员成长之路的总结