求一个随机算法

wangsiyuanoo 2009-03-18 09:35:12
求一个从一百万个数字中随机取出100个数字的算法
...全文
110 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangsiyuanoo 2009-03-18
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 wuyu637 的回复:]
srand( (unsigned)time( NULL ) );
double temp = rand()/32767.0;
long mark = temp * 100 0000;
[/Quote]
这个得到的随机数会重复么?
killbug2004 2009-03-18
  • 打赏
  • 举报
回复
win下用内存映射再用指针偏移访问速度应该可以
wangsiyuanoo 2009-03-18
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 ReViSion 的回复:]
没必要全取出来吧,
太恐怖啦
[/Quote]
那应该怎么做啊?
ReViSion 2009-03-18
  • 打赏
  • 举报
回复
没必要全取出来吧,
太恐怖啦
wangsiyuanoo 2009-03-18
  • 打赏
  • 举报
回复
其实这样的
有个txt文件,里面的内容是:
0000000001,WSYCSA000000019239774046
0000000002,WSYCSA000000024374829419
0000000003,WSYCSA000000036378197992
0000000004,WSYCSA000000041514236565
0000000005,WSYCSA000000056618281839
0000000006,WSYCSA000000068622334128
0000000007,WSYCSA000000073758698953
0000000008,WSYCSA000000088961744226
0000000009,WSYCSA000000099977928050
0000000010,WSYCSA000000106011513736
............
0000999990,WSYCSA009999906535589983
0000999991,WSYCSA009999918539607583
0000999992,WSYCSA009999923643646056
0000999993,WSYCSA009999938879691429
0000999994,WSYCSA009999947836992167
0000999995,WSYCSA009999955918108576
0000999996,WSYCSA009999961122153849
0000999997,WSYCSA009999973058202322
0000999998,WSYCSA009999988262569635
0000999999,WSYCSA009999993366616237
0001000000,WSYCSA010000005316648102
一共是一百万行
我先需要把这一百万行读出来
请问用什么数据结构最快啊
我是想用vector<const char *>vec来放这一百万个数据
还有最快的方法么?
chin_chen 2009-03-18
  • 打赏
  • 举报
回复
那就找到最大的,找到最小的,
再rand()
wangsiyuanoo 2009-03-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 chin_chen 的回复:]
求一个从一百万个数字中随机取出100个数字的算法

是固定的确定的一百万个数字中取值还是 随便一百万个数字中取值啊。?
[/Quote]

是固定的一百万个数字
不是随便的
chin_chen 2009-03-18
  • 打赏
  • 举报
回复
求一个从一百万个数字中随机取出100个数字的算法

是固定的确定的一百万个数字中取值还是 随便一百万个数字中取值啊。?
  • 打赏
  • 举报
回复
[Quote=引用楼主 wangsiyuanoo 的帖子:]
求一个从一百万个数字中随机取出100个数字的算法
[/Quote]

用rand随机生成一个数字,去该数字为下标的地方读取那一百万个数字的数组,取出数字。
wuyu637 2009-03-18
  • 打赏
  • 举报
回复
srand( (unsigned)time( NULL ) );
double temp = rand()/32767.0;
long mark = temp * 100 0000;
wuyu637 2009-03-18
  • 打赏
  • 举报
回复


The rand function returns a pseudorandom integer in the range 0 to RAND_MAX (32767). Use the srand function to seed the pseudorandom-number generator before calling rand.


srand(time);

double temp = rand()/32767.0;
long mark = temp * 100 0000;



================================
mark 作为下标,去取数就可以了。
itegel84 2009-03-18
  • 打赏
  • 举报
回复
rand()
palsword 2009-03-18
  • 打赏
  • 举报
回复
方法一、建大数组
用循环
int j[1000000]={0..999999};
//循环100次,从1000000开始循环,这样可以防止取余(%)的时候,数组最后的元素只被取到一次
for(i=1000000;i>1000000-100;i--)
{
x = rand()%i;
//取第j[x]行的数据---代码
//
j[x] = j[i-1] ;
j[i-1] = 0;
}
//这样循环100次,数据就取好了

方法二、小数组
int j[100] = {-1};
for(i=0;i<100;i++)
{
while(true)
{
x=rand()%1000000;

//代码,在j[100]中搜索,判断x是否已经用过
//这里可以加点技巧,比如说根据上面得到的x,如果已经用过,则对x+1或者其它方式,
//取到一个没用过的x为止
if (不存在)
{
j[i] = x;
//取第x条数据
break;
}
}

}
wuyu637 2009-03-18
  • 打赏
  • 举报
回复
会。。你可以先保存一个数组,记录已经访问的mark,如果重复就丢弃,再选一个随机数,
理论上重复的概率很小。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧