征集一种对回复抽多个奖的随机算法,回复方案必感谢~
我把回复参与抽奖的资格,最晚截止到今晚 23:59:59,应该按什么随机算法抽 3 个奖?
例如:拿具体数字来说,一共收到 1024 个回复,怎么以一个公正+随机的算法来抽[1,1024]区间的 3 个整数?
凡是回复方案,无论方案好坏必感谢~
凡是回复方案,无论方案好坏必感谢~
以上作法有一个小问题,就是 LZ 提前知道结果,有可能进行抢,所以最后可以在这个数组上取一个不可控因素作偏移量。也就是传统的抽取一的方法。
可以参考下这篇论文 P. L’Ecuyer, “Maximally Equidistributed Combined Tausworthe Generators”, Mathematics of Computation, 65, 213 (1996), 203–213.
有内核工具的 random 是参考这篇文章写的,量足够大的情况下它能保证公平以及范围足够大。
fio 实现 : https://github.com/axboe/fio/blob/master/lib/rand.c
fio 的随机算法目的是在 randrw 的情况下保证全盘公平覆盖。。所以和你的目的差不多,你只需要取三次即可
#明天开盘时的上证指数*100 的值
sh_value = 3083.39
#层总数
msg_count=1234
#初始化随机值
random.seed(sh_value * 100)
seed2 = random.randint(1,9999)
random.seed(seed2)
//开始抽奖
print “第一个中奖者层:%d” %random.randint(1,msg_count)
print “第二个中奖者层:%d” %random.randint(1,msg_count)
print “第三个中奖者层:%d” %random.randint(1,msg_count)
print “第四个中奖者层:%d” %random.randint(1,msg_count)
#如果上面有重复,后者用候补顶替
print “候补中奖者一:%d” %random.randint(1,msg_count)
print “候补中奖者二:%d” %random.randint(1,msg_count)