随机数算法之从N个数中取M个数

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

随机数算法之从N个数中取M个数
算法描述如下:从M个数中选出N个数来(0<N<=M),要求N个数之间不能有重复。

分两种情况:
1.n>>m时
repeat
Randomize; //初始化随机数
a:=Random(n-1)+1; //如果n=50,0 <=Random(50-1) <=49
b:=Random(n-1)+1;
c:=Random(n-1)+1;
until (a <> b) and (b <> c) and (a <> C)
2 m接近n时,随机抽取⼀个,如果重复了,重新抽取⼀次。

缺陷是需要对⽐。

进⼀步做法:每次随机取出⼀个数,之后将该数放置到集合的末尾去,这样下次取随机数的时候,只从1到⽬标集合个数-1个中随机抽取,如此循环,这样就避免了判断在结果集合中判断是否存在相冲突的数的过程。

另外⼀种不使⽤数组⽽使⽤可变集合的办法,这种算法的做法是使⽤了之后马上从源集合中清除掉(数组是没有办法这么做的),因⽽也是可以做到⽣成不重复的随机数的。

相关文档
最新文档