今天到公司的第一天,兴奋还没走完,就来了一个比较有挑战的TASK。。哈哈,我喜欢
以前就知道可以用概率算法来模拟抽奖,但是都是一些确定型的问题,如给定的总人数,给定奖品数,这样模拟起来就很好办,方法也比较多,最容易的是直接用SQL语句随机抽出给定人数中奖, select * from people order by rand() limit N; N为中奖人数。也可以用随机算法,给全部人个标号id,随机产生不重复的N个整数,对应的ID即为中奖者。
不过,当总人数未知,且是动态改变,同时是每个人即时抽奖,立刻得到抽奖结果的话,逢人数或逢时间中奖是一种解决方法,目前还没想到怎样用纯概率算法去模拟。逢人数中奖,即事先规定抽奖人数达N时,第N个人中奖,以此类推。但此法由于人数未知,也不好定N。 这样,逢时间中奖看起来是更优的解决方案了,指定一些时间点或时间段,此时抽奖的人中奖。当然,指定这些‘定点’,可以是手动,也可以是随机产生。
目前思路还是个大概,继续摸索中。。
以前就知道可以用概率算法来模拟抽奖,但是都是一些确定型的问题,如给定的总人数,给定奖品数,这样模拟起来就很好办,方法也比较多,最容易的是直接用SQL语句随机抽出给定人数中奖, select * from people order by rand() limit N; N为中奖人数。也可以用随机算法,给全部人个标号id,随机产生不重复的N个整数,对应的ID即为中奖者。
不过,当总人数未知,且是动态改变,同时是每个人即时抽奖,立刻得到抽奖结果的话,逢人数或逢时间中奖是一种解决方法,目前还没想到怎样用纯概率算法去模拟。逢人数中奖,即事先规定抽奖人数达N时,第N个人中奖,以此类推。但此法由于人数未知,也不好定N。 这样,逢时间中奖看起来是更优的解决方案了,指定一些时间点或时间段,此时抽奖的人中奖。当然,指定这些‘定点’,可以是手动,也可以是随机产生。
目前思路还是个大概,继续摸索中。。