找回密码
 加入我们

QQ登录

只需一步,快速开始

搜索
查看: 10713|回复: 5

[求助] 随机打乱数组怎么样才能更随机?

  [复制链接]

6

主题

10

回帖

0

精华

铜牌会员

积分
98
发表于 2010-11-24 16:56:24 | 显示全部楼层 |阅读模式
      Randomize
      Dim i     As Integer
      Dim ss     As Integer
      Dim j     As Integer
      Dim k     As Integer
      For i = 1 To 10
           j = 9 * Rnd() + 1
            k = 9 * Rnd() + 1
            ss = a(j)
            a(j) = a(k)
            a(k) = ss

      Next i
这是一种

      Randomize
      Dim i     As Integer
      Dim ss     As Integer
      Dim j     As Integer
      Dim k     As Integer
      For i = 1 To 10'        
            k = 9 * Rnd() + 1
            ss = a(i)
            a(i) = a(k)
            a(k) = ss
      Next i

这也是一种,感觉第二种比第一种随机,是这样吗?

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-2-8 09:53:44 | 显示全部楼层
使用更接近真随机的函数吧,看看这个:

【分享】马大哈系列功能模块----更好的随机数发生函数,可替代Rnd
http://www.m5home.com/bbs/thread-3225-1-1.html
我就是嗷嗷叫的老马了......

2

主题

37

回帖

0

精华

铜牌会员

积分
191
发表于 2011-2-8 19:29:54 | 显示全部楼层
源数组是否有重复的元素?
就像洗牌法一样了,以后取出的数值,全部提取完毕后,还是一样的。

要防止重复,可以用线性同余法,随机数的生成关键要有随机种子,
种子不是随机的,生成的随机数必然不是真正Random。
可以综合一下计算机有随机数据的地方,比如:
时间的浮点位,CPU占用率,内存使用情况,数据包的发送时常,各种传感器的温度,等等

275

主题

3017

回帖

1

精华

管理员

嗷嗷叫的老马

积分
17064

论坛牛人贡献奖关注奖最佳版主进步奖人气王疯狂作品奖精英奖赞助论坛勋章乐于助人勋章

QQ
发表于 2011-3-28 14:28:07 | 显示全部楼层
回复 miaomiao 的帖子

嗯,我发的那个函数就是以这些为种子的
我就是嗷嗷叫的老马了......

1

主题

13

回帖

0

精华

铜牌会员

积分
146
发表于 2011-4-1 18:11:07 | 显示全部楼层
洗牌法随机算法是比较好一种方法,54张牌,只需要随机54次

0

主题

53

回帖

0

精华

铜牌会员

积分
165
发表于 2012-7-31 17:20:45 | 显示全部楼层
两种算法基本没区别.
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表