编程珠玑---读书笔记---生成随机整数的有序子集
2013-06-24 19:53
323 查看
第一种:使用STL实现,这种现成的数据结构能使代码非常简便,每次插入操作都在O(logm)时间内完成,而遍历集合S需要O(m)的时间,所以完成的程序需要
O(m logm)的时间(mx相对于n较小事),但是这种数据结构的空间开销却很大。以下程序实现生成m个0-n内的有序整数子集,第一个算法取m=10,n=100;
另一种方法:把包含整数0-n-1的数组顺序打乱,然后将前m个元素有序输出,或者是直接讲前m个元素打乱,对应的c++代码如下:
算法需要n个元素的内存空间,和O(n+m logm)的时间。
O(m logm)的时间(mx相对于n较小事),但是这种数据结构的空间开销却很大。以下程序实现生成m个0-n内的有序整数子集,第一个算法取m=10,n=100;
#include <iostream> #include <string> #include <cstdio> #include <cmath> #include <vector> #include <algorithm> #include <sstream> #include <cstdlib> #include <fstream> #include <queue> #include <ctime> #include <set> using namespace std; int main() { srand(time(NULL)); set<int> S; while(S.size()<10){ S.insert(rand()%100); } set<int>::iterator it; for(it=S.begin();it!=S.end();it++)cout<<*it<<" "; cout<<endl; return 0; }
另一种方法:把包含整数0-n-1的数组顺序打乱,然后将前m个元素有序输出,或者是直接讲前m个元素打乱,对应的c++代码如下:
#include <iostream> #include <string> #include <cstdio> #include <cmath> #include <vector> #include <algorithm> #include <sstream> #include <cstdlib> #include <fstream> #include <queue> #include <ctime> #include <set> using namespace std; int bigrand(){ //返回一个较大的随机数 return RAND_MAX*rand()+rand(); } int randint(int l,int u){ //返回一个[l,u]内的随机数 return l+bigrand()%(u-l+1); } void genshuf(int m,int n) { int i,j; int *x=new int ; for(i=0;i<n;i++)x[i]=i; for(i=0;i<m;i++){ j=randint(i,n-1); int t=x[i]; x[i]=x[j]; x[j]=t; } sort(x,x+m); for(i=0;i<m;i++)cout<<x[i]<<" "; cout<<endl; delete []x; } int main() { srand(time(NULL)); genshuf(10,100); return 0; }
算法需要n个元素的内存空间,和O(n+m logm)的时间。
相关文章推荐
- 编程珠玑_第十三章_生成一个随机整数的有序集合
- 编程珠玑: 13章 搜索 13.4使用整数结构,生成[0 ,maxval]范围内m各随机整数的有序序列 -------解题总结
- 编程珠玑: 13章 搜索 13.1生成[0 ,maxval]范围内m各随机整数的有序序列 -------解题总结
- 编程珠玑: 12章 取样问题 12.3设计空间,程序的输入包含两个整数m和n,其中m<n。输出是0~n-1范围内m个随机整数的有序列表,不允许重复。 解法2-------解题总结
- 编程珠玑: 12章 取样问题 12.1程序的输入包含两个整数m和n,其中m<n。输出是0~n-1范围内m个随机整数的有序列表,不允许重复。 优化解法-------解题总结
- 编程珠玑: 12章 取样问题 12.3设计空间,程序的输入包含两个整数m和n,其中m<n。输出是0~n-1范围内m个随机整数的有序列表,不允许重复。 -------解题总结
- 编程珠玑之第一章习题4: 生成不同的随机顺序的随机整数及存储与读取
- 编程珠玑 ~~ 排序与随机整数序列
- 如何生成[0,maxval]范围内m个随机整数的无重复的有序序列
- 编程珠玑之第二章questionA: 40亿个随机排列整数问题
- 编程珠玑之1.4生成小于n且没有重复的k个整数
- 第二次编程作业:判断一个正整数是否为质数的算法和 随机生成一个n bit位的长整数
- 编程珠玑: 13章 搜索 13.2使用线性结构,生成[0 ,maxval]范围内m各随机整数的有序序列 -------解题总结
- 编程珠玑: 13章 搜索 13.2使用链表结构,生成[0 ,maxval]范围内m各随机整数的有序序列 -------解题总结
- 软件工程实验一--编程随机生成30个四则运算,算数包括100以内的整数和真分数。
- 随机生成不重复的整数(随机洗牌函数)
- 给定能随机生成整数1到5的函数,写出能随机生成整数1到7的函数
- 基础算法测试——生成一个1-10之间的随机整数组合
- 随机生成n个不重复的正整数
- 随机生成10个不重复的整数