探讨下生成唯一随机数的方法

一aa一 2011-03-08 01:47:05
譬如要生成5000个在1-1W之间的随机数且不重复。
我的想法是这样的:首先,生成一个随机数,然后将这个随机数赋值给我定义的一个数组。代码如下

ranmozie
for i=1 to 5000
id=ran*10000+1
for a=0 to i
if arr(a)=id then
...
end if
next
arr(i)=id
next


写到这我就不敢继续下去了 这样的话 内循环就要执行12502500次以上...那个资源浪费的都要遭天谴了。。。
...全文
254 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
一aa一 2011-03-10
  • 打赏
  • 举报
回复
嗯 5楼的提醒非常到位 谢谢。、
一aa一 2011-03-10
  • 打赏
  • 举报
回复
这么冷清?
  • 打赏
  • 举报
回复
提示一下,有两种方法:
1.完全的固定规则控制(当然也可以由不同传参来改变具体结果)。
2.在小于分段间隔的幅度内进行随机数生成,比如100以内生成10个数,则在每10个数的分段之间用随机数生成小于10的随机数加在分段值上。

消除误解:有人可能会觉得这样过于规律化,只比1234多了固定或不固定的一些间隔。其实,关键是这个控制的规则。稍微做过一些数字控制编程的人来说,都会明白,可以按某种自定规则来生成顺序不固定(既非单向性)的数字序列,最后的结果,如果不告诉你,看上去和随机数发生的没什么区别。

更何况第2种方式本身就使用了随机数,只不过是把它作为点缀而不是主体。就是以不重复为主体,以随机数为点缀,这样既随机又不重复的效果就非常有效率的达到了。只需要一层循环即可。
  • 打赏
  • 举报
回复
随机数和不重复,两者本身就是个矛盾。
只要你随机了,或者更准确地说,如果你不以下面思路作主导控制的话,就必须检测是否已经重复。
我所说的另外的、作为主导的思路,就是按一定规则控制数据分段。
这就象完全自由经济和计划经济的区别一样。完全的自由经济肯定一团乱。必须加以计划控制。
具体不多说了,给你们留点自己思考的空间。
md5e 2011-03-08
  • 打赏
  • 举报
回复

<%
randomize
dim a(20),b(10)
for i=1 to 20
a(i)=i
next

for i=1 to 10
r=cint( 1 +(rnd * (19 - i)))

b(i)=a(r)
for j=r to (19 - i -1)
a(j)=a(j + 1)
next
Response.Write(b(i) &"<br>")
next

%>
ningziruyan 2011-03-08
  • 打赏
  • 举报
回复
加上时间

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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