作者hirabbitt (兔子)
看板Programming
标题Re: [问题] 从0-99999选出一千个不重覆的乱数?
时间Thu Jul 1 05:05:07 2010
不知道这样够不够乱...
取1000个范围随便的随机数r1 r2 r3 ... r1000
并将它们当做间隔
取1个随机数当做我们要的起点a1
第1个我们要的数字加上第一个间隔
就是我们要的第2个数字a2=a1+r1*1000/(r1+r2+r3+...+r1000)
第三个数字a3=a2+r2*1000/(r1+r2+r3+...+r1000)
第n个数字an=a(n-1)+r(n-1)*1000/(r1+r2+r3+...+r1000)
===========
间隔范围太大或太小的话
数字分配会变的比较平均
感觉不怎麽随机?
※ 引述《yauhh (哟)》之铭言:
: 这个问题,有人提到每次随机取一项的机率必须同等,所以在演算法上面拼命想.
: 但回想许多真实系统,有存在这种机率不均的问题吗?
: 乐透彩球用机器取球,第一次吸出一颗, p(1/49), 第二颗 p(1/48|1/49),
: 第三颗 p(1/47|1/48,1/49),
: 单看每一颗球的选取范围,的确是不一样.
: 但是加入考量每一颗球被取出的次序,似乎就没有这种问题了不是?
: 而且在这件事情中,我们都只看前一组跟下一组的机率是均等的.
: 而前一组与下一组机率均等,是符合於从袋中取出彩色球并可放回的问题形式.
: 如果真的很在乎每个球随机选取时的选取范围,在真实系统的做法不外乎
: 先找个黑袋把球装好,随意摇匀,然後用隔袋抓球的方式把需要取的球数抓好,
: 一次倒出所抓的球! 这样的机率很对吧?
: 至少也要用平行处理的方式随机选球,以最小的例子来说,
: 从袋中取出二颗球,并每次抽取的机率相同,则取球的方法就是两只手一起伸进去
: 同时各自摸出一颗球出来.
: 我还是不理解为什麽从十万数字中抽一千数字,每个数字一定要平均机率.
: 抽签也是有顺序,只要有顺序,除了先抽与後抽的选取范围不同,
: 每个後选者对於随着顺序对於命中机会影响的感觉就会有不同.
: 连真实系统都没有所谓真乱数,却都想在电脑系统上实现"真乱数",这有必要吗?
--
◤ __ \__◣
◢◤◢◤ ψhirabbitt
◢ ◤ ◢███◣
◢███◣
和你的约定 █████
█████ 不变心的约定
██
●█
● █▇███
是变心的约定 ██
╱╲ ●◥█████◣● 是我和自己的约定
◥
╱█
╱╱ ● ◥████ ˇ
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 163.13.127.91
1F:→ karcher:除这个动作,其实就等於一个分类的动作 218.167.125.49 07/01 20:31