编程珠玑第十二章 生成有序随机序列
来源:互联网 发布:淘宝假发多少钱 编辑:程序博客网 时间:2024/05/16 00:40
编程珠玑第十二章的主题是给定0-n-1共n个数,生成m(m<=n)个有序的随机序列,序列不能重复
方法一:最容易想到的就是利用C++中的set容器,不断向set中插入rand()%n的数,直到set的size为M,break即可,set容器会自动将元素排序
方法二:是书上给的解法,扫描数组[0,n),然后令remaining = n,select = m,每次成功选择一个数i,则select -1,每次循环remaining--;
方法三:对于特定数组list[n],元素为0-n-1,对于前m个数,每次产生一个随机的位于(i,n-1)的数rand,然后交换i和rand的元素,swap(i,rand),最后对前m个数排序即可
这里面有一个比较有意思的逆向思维的问题,假设n = 100万,m = n-10,然后我们真的要去生成100万-10个随机数吗,当然不是,我们只要生成10个随机数,然后用那100万个数除去这10个数,不就是n-10个随机数了吗
#include<stdio.h>#include<time.h>#include<stdlib.h>#include<string.h>/* * Method No_01 */void random_01(int *list,int n,int m){int i,j = 0;int remaining = n,select = m;for(i = 0;i<n;i++){if(rand()%remaining < select){list[j++] i;select--;}remaining--;}}/* *method No_02 set in c++ */ void random_02(set<int> &s,int n,int m){while(1){s.insert(rand()%n);if(s.size() == m)break;}}/* * Method NO_02 */int randint(int x,int y){return rand()%(y-x+1) + x;}/* the elements of list are from to n-1,in order */void random_02(int *list,int n,int m){srand((unsigned int)time(NULL));int i, j;for(i = 0;i<m;i++){swap(&list[i],&list[randint(i+1,n-1)]);}qsort(list,m,sizeof(list[0]),cmp);// sort}
- 编程珠玑第十二章 生成有序随机序列
- 编程珠玑: 13章 搜索 13.1生成[0 ,maxval]范围内m各随机整数的有序序列 -------解题总结
- 编程珠玑---读书笔记---生成随机整数的有序子集
- 编程珠玑: 13章 搜索 13.2使用线性结构,生成[0 ,maxval]范围内m各随机整数的有序序列 -------解题总结
- 编程珠玑: 13章 搜索 13.2使用链表结构,生成[0 ,maxval]范围内m各随机整数的有序序列 -------解题总结
- 编程珠玑: 13章 搜索 13.4使用整数结构,生成[0 ,maxval]范围内m各随机整数的有序序列 -------解题总结
- 编程珠玑_第十三章_生成一个随机整数的有序集合
- <<编程珠玑>> 生成随机文本
- 编程珠玑第十二章习题
- 编程珠玑 ~~ 排序与随机整数序列
- 利用随机单词生成文本(《编程珠玑》第15章)
- 用随机字母生成随机文本(《编程珠玑》第15章)
- 【编程珠玑】第十二章 取样问题
- C++使用STL 把有序序列 生成 随机序列
- 随机取样(《编程珠玑》第12章)
- 编程珠玑-随机抽样
- 编程珠玑(2)第十二章学习笔记 取样问题
- 编程珠玑第十二章--应用之取样问题
- W5300E01-ARM用户手册版本1.0(四)
- ui designer tools collection
- 50个对电子商务零售商有价值的建议
- 【转】经典的01背包问题
- 【最小生成树】神母牛的实验
- 编程珠玑第十二章 生成有序随机序列
- How To Access Forms Directly In Oracle Applications R12 [ID 552301.1]
- HDU 1525 Euclid's Game (博弈)
- POJ 2773 欧拉函数, 素数表
- Hdu 2222 [AC自动机]
- 移动平台的产品设计世界
- I2S总线协议 .
- HDU OJ 4334 Trouble 【hash】
- lotus表单中对文本域和富文本域的处理