算法上均匀分布的随机抽奖,如何避免现实的现场抽奖的中奖号码有时出现集中扎堆的现象?

本文探讨了均匀分布数学原理及其在多线程平均分区随机并行抽取算法中的应用,通过实例分析了如何减少抽奖过程中的号码集中现象,确保中奖人的随机性和公平性。
多线程平均分区随机并行抽取算法 
均匀分布数学原理:
  设连续型随机变量X的分布函数为
  F(x)=(x-a)/(b-a),a≤x≤b
  则称随机变量X服从[a,b]上的均匀分布,记为X~U[a,b]。
  若[x1,x2]是[a,b]的任一子区间,则
  P{x1≤x≤x2}=(x2-x1)/(b-a)
  这表明X落在[a,b]的子区间内的概率只与子区间长度有关,而与子区间位置无关,因此X落在[a,b]的长度相等的子区间内的可能性是相等的,所谓的均匀指的就是这种等可能性。
  均匀分布的期望为(a+b)/2,方差为(b-a)^2/12。
  在实际问题中,当我们无法区分在区间[a,b]内取值的随机变量X取不同值的可能性有何不同时,我们就可以假定X服从[a,b]上的均匀分布。
 
上述算法从数学角度来分析,很正确,但在实际的随机抽奖中,一旦出现号码集中现象,用户的心里肯定很纠结,如何克服或减少这个现场的发生你呢?
场景假设:某公司要搞一个年终抽奖,共有603名员工参与.打算只抽取500个一等奖,每次抽取6个.每个员工都有自己的身份编号,比如:A001至A603,他们的名字为了便于测试,假设为B001至B603,按照这个顺序规律,信息用Excel做好,共占603行,如下图:

然后全部导入到抽奖系统的数据库中,共占603行.单位员工的编号,作为主关键字不能为空或重复,也可以使用手机号码或身份证号码等.

抽奖前,右击软件界面,在弹出的菜单中,选择“重抽初始化[默认:主字段排序分区]”,进行初始化,然后预备,抽奖.假设是第一次抽取,系统把所有参与者均分为6个区,零头归为最后一个区.6个线程同时滚动抽取.滚动停止界面如下:
此算法的最大优点可以避免中奖人主字段扎堆现象.比如同一个部门的员工编号往往紧挨在一起,有时中奖人数在某些部门较多,某些部门没有.通过此方法可以在一定程度上缓解一下
假设第一次抽奖前,右击软件界面,在弹出的菜单中,选择"重抽初始化[随机排序分区]",进行初始化,然后预备,反复开始抽奖、停止 抽奖时,每次滚动界面停止时,类似界面如下:
6个中奖人的主字段没有规律可循.实际上,重抽初始化[随机排序分区]时,系统给每个抽奖人一个随机号码,然后,系统按照这个号码排序,然后也均分成6个区,算法同上.当你再点击"重抽初始化[随机排序分区]"命令时,又重新给每个抽奖人一个随机号码,又重新排序分区.
如果具备高性能处理器或多个处理器或宽裕的内存资源,才能真正发挥多线程并行抽取的功能.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值