huabao 发表于 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

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

马大哈 发表于 2011-2-8 09:53:44

使用更接近真随机的函数吧,看看这个:

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

miaomiao 发表于 2011-2-8 19:29:54

源数组是否有重复的元素?
就像洗牌法一样了,以后取出的数值,全部提取完毕后,还是一样的。

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

马大哈 发表于 2011-3-28 14:28:07

回复 miaomiao 的帖子

嗯,我发的那个函数就是以这些为种子的

sunson 发表于 2011-4-1 18:11:07

洗牌法随机算法是比较好一种方法,54张牌,只需要随机54次

WallesCai 发表于 2012-7-31 17:20:45

两种算法基本没区别.
页: [1]
查看完整版本: 随机打乱数组怎么样才能更随机?