作者mantour (朱子)
看板Fortran
标题Re: [问题] 随机排序的问题
时间Mon Oct 19 20:51:57 2009
为什麽要洗这麽多次呀
这样应该就可以了吧
! a(0) ~ a(51)
for i=0,50
产生一个 i ~ 51 的乱数
swap(a(r), a(i))
想像成本来是52个人坐一排
然後重抽一轮新的座号
※ 引述《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
: ※ 引述《janewinnie (逃离)》之铭言:
: : 请问fortran有没有一个指令是可以将数值随机排序的?
: : 例如我原本的资料为
: : -3 -3 -3 -3 -3 -2 -2 -2 -2 -2 -1 -1 -1 -1 -1 0 0 0 0 0 1 1 1 1 1
: : 我想要它随机排序变成
: : -3 -2 0 -2 1 -1 -3 -3 0 1 -2.......
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.213.158
※ 编辑: mantour 来自: 140.112.213.158 (10/19 20:52)
※ 编辑: mantour 来自: 140.112.213.158 (10/19 20:53)
※ 编辑: mantour 来自: 140.112.213.158 (10/19 20:56)
※ 编辑: mantour 来自: 140.112.213.158 (10/19 20:58)
1F:推 sjgau:反正电脑的速度很快。多洗几次,有什麽关系? 10/19 21:21
2F:→ sjgau:我在美国的赌城,看到自动的洗牌机,速度并不快,他也是洗 10/19 21:23
3F:→ sjgau:很多次。当这一副扑克牌在使用的时候,另一副牌就在旁边洗 10/19 21:23
自己推文推得乱了 修一下
我觉得二种方法好像不太一样
S大的方法是要当洗的次数->无穷大时排出来的顺序才不受本来的顺序影响
(排出来每张牌在每个位置的机率才会均等)
直接乱数抽新位置,比较能保证每张牌出现在各位置的机率不受本来位置的影响
(不过我没有质疑S大的意思,
刚刚重看了一下觉得自己第一行语气不太好真抱歉)
※ 编辑: mantour 来自: 140.112.213.158 (10/19 22:09)
※ 编辑: mantour 来自: 140.112.213.158 (10/19 22:14)
4F:推 latinboy: 应该要产生 i~51 , 你的想法方向是对的 10/19 22:45
5F:→ mantour:喔喔 对 本来是写从後面开始抽,没想到改过来改错了 10/19 23:07
6F:→ mantour:谢谢 10/19 23:07
※ 编辑: mantour 来自: 140.112.213.158 (10/19 23:08)
7F:推 janewinnie:感谢大家! 10/20 00:44