急救(面试题)(100分)

  • 主题发起人 主题发起人 94132195
  • 开始时间 开始时间
刚看完一个呵呵呵
定义一个集合放1。。99 顺序的吧呵呵
然后产生随机数
第一次random(99);
取得对应位置上的数然后从集合里面剪掉
放入另外一个数组里面
第二次randow(98);
取得对应位置上的数然后从集合里面剪掉
放入另外一个数组里面



循环吧
 
creation-zy,你这个是洗牌算法吧?
我曾经模拟过10亿次洗牌过程,发现它的分布过程很不随机。
随即种子取的是系统时间的毫秒数
你对此怎么认为?
 
to 白马小将:
如果你两次洗牌的间隔小于一毫秒,那么Randomize的结果就是一样的,产生的排列当然也就
一样了。如果你每毫秒可以将上面的过程执行1000次,那么十亿次中实际只有1000000个不同的
组合方案。
我认为还有可能是Pascal的伪随机数发生器不够“逼真”。由于我的算法是随机打乱数组内部
元素的顺序,我们完全可以将 “for i:=0 to 99do
M:=i;”作为初始化过程只在最开始执
行一次,以后取随机数的时候只要用洗牌过程即可——我相信这样做之后的统计随机效果会非常
逼真。——当然,为了避免上面所说的Randomize问题,如果间隔太短的话,建议每次洗牌时不
要再次调用Randomize,在初始化的时候调用一次即可。
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1416416
 
接受答案了.
 
后退
顶部