作者sjgau (sjgau)
看板Fortran
标题Re: [问题] 随机排序的问题
时间Tue Oct 20 07:57:25 2009
※ 引述《mantour (朱子)》之铭言:
: 为什麽要洗这麽多次呀
我想,在或然率,机率,统计学里面,
有所谓的 大数法则。
任何事情,一定要 样本空间够大,
才能够显示出他的 意义。
.
.
.
: 这样应该就可以了吧
: ! a(0) ~ a(51)
: for i=0,50
: 产生一个 i ~ 51 的乱数
: swap(a(r), a(i))
: 想像成本来是52个人坐一排
: 然後重抽一轮新的座号
就这个 52个人坐成一排的观念来讨论,
你的方法是,从 1号到 52号,
每一个号码,去抽出一个号码 n1,
和 n1 座位的人 互换座位。
我的方法是
做 52次,每次抽出两个号码 n1, n2
这两个人 互换座位。
效果,应该是 差不多。
如果要 真正的去 检讨比较 两个方法的优劣,
有必要去 精通统计学里面的 检测技巧,
真正的拿各种检测方法去 评比优劣。
但是,有这麽 严重吗?
以上 两个方法,多做个 几轮,
52*10轮,不就 搞定。
所需要的 CPU time, 不超过 0.1秒
: ※ 引述《sjgau (sjgau)》之铭言:
: : 你的意思,应该是 随机洗牌。
: : 假设你原本的资料有 52笔,
: : 存放在 一个 一维阵列
: : integer a(52)
: : ! a(1) . . . a(52)
: : for i=1 to 300 do
: : ! 随机产生两个 乱数 n1, n2, >= 1, and <= 52
: : ! 交换 a(n1) 和 a(n2) 的值
: : end do
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.231.77.148
1F:→ sjgau:顺便提供一个心得,以目前的 PC, 一秒钟执行两亿个运算, 10/20 07:59
2F:→ sjgau:应该没有问题 10/20 07:59