标题:来看看这个题目,请大家提出效率高的方法
只看楼主
小糊涂仙
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2007-8-5
 问题点数:0 回复次数:24 
来看看这个题目,请大家提出效率高的方法
在1-1000之间产生1000个不一样的随机数
搜索更多相关主题的帖子: 效率 
2007-08-10 01:45
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
得分:0 
可以达到线性O(n)。

Fight  to win  or  die...
2007-08-10 02:07
小糊涂仙
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2007-8-5
得分:0 
楼上说的上什么?偶笨笨~不懂

谁能改变,人生的长度 我们都在不断赶路,忘记了出路 去不到终点,回到原点 享受,那走不完的路
2007-08-10 02:29
雨中飞燕
Rank: 3Rank: 3
等 级:禁止访问
威 望:8
帖 子:2200
专家分:0
注 册:2007-8-9
得分:0 
洗牌法打乱O(n)
过程是先声明数值从1到1000的数组list[1000]
然后i从0到n-1变化,list[i]和list[rand()%1000]交换
如果觉得不够乱就多次运行上一个过程就可以了
2007-08-10 02:33
blueboy82006
Rank: 5Rank: 5
来 自:幻想世界
等 级:贵宾
威 望:16
帖 子:1227
专家分:57
注 册:2007-7-23
得分:0 

看了上面的发言,似懂非懂,可能是基础太差了吧
可以发个简短的程序来看看吗?
不胜感激啊


2007-08-10 07:47
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
得分:0 
我说的就是4楼的方法,不过不需要运行两次,因为得到的排列概率为1/n!。

不过修正一点,

i <--- 1 to length[a]
在第i次迭带里,将a[i]与a[random(i,n)]交换。

Fight  to win  or  die...
2007-08-10 09:19
野比
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:1627
专家分:516
注 册:2007-5-24
得分:0 

喂喂...1000以内要1000个随机数.. 还要不一样的? ...

在开玩笑吗? 那不就是 1 到1000吗?...

你不如说" 把1 到1000的排列打乱"...


女侠,约吗?
2007-08-10 13:27
小糊涂仙
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2007-8-5
得分:0 
呵呵,楼上的,给你举个例子,1~5之间产生5个随机数和产生5个不一样的随机数字是不一样的
1~5产生5个随机数,可以产生重复的,例如随机产生 3,4,3,3,1
而产生5个不一样的随机数,指的是所产生的5个数字"不能相同"

谁能改变,人生的长度 我们都在不断赶路,忘记了出路 去不到终点,回到原点 享受,那走不完的路
2007-08-10 23:31
野比
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:1627
专家分:516
注 册:2007-5-24
得分:0 

那麻烦你在1-5之间给我产生5个不一样的随即数看看...谢了


女侠,约吗?
2007-08-11 00:42
小糊涂仙
Rank: 1
等 级:新手上路
帖 子:86
专家分:0
注 册:2007-8-5
得分:0 

例子很多
例如 1,2,3,4,5
再如 2,4,5,1,3
再再如 3,4,5,1,2
再再再如 5,4,1,2,3
...
......


谁能改变,人生的长度 我们都在不断赶路,忘记了出路 去不到终点,回到原点 享受,那走不完的路
2007-08-11 18:36



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-161615-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.279874 second(s), 7 queries.
Copyright©2004-2025, BCCN.NET, All Rights Reserved