`
lavafree
  • 浏览: 534905 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

10000个球中随机取出1000个球

    博客分类:
  • Java
阅读更多

前几天看到一个算法题,说有10000个球,从中随机取出1000个,要求高性能?

 

 

刚开始我的想法是,循环0-1000 每次在0-10000中产生随机数,如果map中不存在,就放入map中,基数加1,如果存在,不加。这个方式基本能实现,但是效率不高,而且理论上有可能死循环。

 

还有一个方式就是,循环1000次,每次产生0-9的随机数,然后基数*10+随机数,存入map中。这样1000次肯定产生不同的球,第二个算法就是每次概率减少1/1000,最后一个概率只有1/10.而前一种最后一个是1/9001.

 

周末无聊,学python,顺便来一个python实现

 

 

import random

map = {}
for i in range(0,1000):
    t = random.randint(i*10,i*10+9)
    map[t]=t

for k in map.iterkeys():
    print k
0
6
分享到:
评论
4 楼 lavafree 2011-03-07  
zcsuntt 写道
for(i = 0; i < 10000; i++)
{
x[i] = i;
}
for(i = 0; i < 1000; i++)
{
t = rand(i,10000-1);
swap(x[i], x[t]);
out(x[i]);
}


既然是从10000个球中区出1000个,所以取出的球可定不能重复,你的代码可定有问题,比如第一次随机数是100,第二次随机数还是100。还有,你第一次循环10000次,第二次又循环1000次,还要做交换,代码效率极差!
3 楼 lavafree 2011-03-07  
贫僧不吃肉 写道
7  * 10 + 20 == 6 * 10 + 30


不会出现你那种情况,每次i为i+1,而且随机数是在0-9范围内。
2 楼 zcsuntt 2011-03-07  
for(i = 0; i < 10000; i++)
{
x[i] = i;
}
for(i = 0; i < 1000; i++)
{
t = rand(i,10000-1);
swap(x[i], x[t]);
out(x[i]);
}
1 楼 贫僧不吃肉 2011-03-06  
7  * 10 + 20 == 6 * 10 + 30

相关推荐

    PHP实现在数据库百万条数据中随机获取20条记录的方法

    2.根据总条数,随机1次,1次性取出20条记录(当然这个就相当于分页了,要求不高的话,这个最快,我用的就是这个); 还有一种方法,随机20次,重复执行20次。 例如: $sum=800000;//得到总条数 /

    17.如何正确地显示随机消息?1

    1. 创建一个临时表 2. 从words表中,按主键顺序取出所有的word值 3. 现在临时表有10000行数据了,接下来你要在这个没有索引的内存临时表上,按照

    17.如何正确地显示随机消息?(1)1

    1. 创建一个临时表 2. 从words表中,按主键顺序取出所有的word值 3. 现在临时表有10000行数据了,接下来你要在这个没有索引的内存临时表上,按照

    A*算法求解八数码问题_C#语言

    下图是解决随机生成的100中状态中,两个生成函数的生成节点与扩展节点统计图: 由上述图表可以看到,将P(n)作为启发函数比将W(n)作为启发函数时,生成节点数与扩展节点数更稳定,相比较来说,采用P(n)作为启发...

    PHP查找数值数组中不重复最大和最小的10个数的方法

    //随机生成1万个元素的数组 for($i=0;$i&lt;10000;$i++){ $ary[]=rand(1,100000); } $ary=array_unique($ary); //去重复数值 sort($ary);//顺序排序 $min_10=array_slice($ary,0, 10);//取出最小的10个数值 $max_10...

    java课程设计题目..doc

    从数据库中取出有关 价格信息,再把这些信息返回给收银台。同时把该收银台的销售总量和有关种类商品的剩 余量以及该持卡顾客的消费情况交数据库存储以供查询。 另外,对没有卡的消费情况不记录该顾客的消费情况等个人...

    javascript入门笔记

    1、从弹框中,分两次输入两个数字,分别保存在 a 和 b中 2、如果 a 大于 b的话 ,则交换两个数字的位置 使用 短路&&,扩展赋值运算符,位运算 4、条件运算符(三目运算) 单目(一元)运算符 :++,--,! 双目(二元)...

    JAVA课程设计题目及要求..doc

    从数据库中取出有关 价格信息,再把这些信息返回给收银台。同时把该收银台的销售总量和有关种类商品的剩 余量以及该持卡顾客的消费情况交数据库存储以供查询。 另外,对没有卡的消费情况不记录该顾客的消费情况等个人...

    计算机应用技术(实用手册)

    我们可以在这里选择我们的软驱类型,当然了绝大部分情况中我们不必修改这个设置。 右下方还有系统内存的参数:BASE MEMORY:基本内存;extended 扩展内存;other 其它内存;total MEMORY 全部内存。 2.BIOS能功设定...

    (重要)AIX command 使用总结.txt

    首先确认系统中已经安装了“bos.content_list”文件集(fileset), 如果没有安装, 请使用smitty installp进行安装. 运行which_fileset命令, 根据文件查找对应的文件集. 例如: #which_fileset iostat /usr/bin/...

Global site tag (gtag.js) - Google Analytics