我正在开发小型彩票游戏,参与者可以从中赢得许多礼物中的一个,每一个都有不同的数量。(代码在PHP中)
我有5种类型的礼物,总共1000种,我期待着1000个参与者。我可以用什么算法来确保这1000件礼物的分布比较均匀。时间并不重要。
参差不齐:先送出2架无人机,然后是10片,等等.
| Title | Quantity |
|-----------|----------|
| Drone | 5 |
| Tablet | 10 |
| Hotel | 100 |
| Gift card | 200 |
| Coupon | 685 |
我有相同的礼物和礼物数量,但我预计600人参加。我希望无人驾驶飞机、平板电脑和酒店之夜都能在第600次参展之前发布。
因此,剩下400张(礼品卡+优惠券),如果剩下的百分比相同,则更好: 116张礼品卡(200/685=29%)和284张优惠券(71%)。
对于第一个场景,我尝试使用这些概率,然后依次遍历这5份礼物:
| Title | Quantity | Probability |
|-----------|----------|-------------------------------|
| Drone | 5 | 5/1000 |
| Tablet | 10 | 10/(1000-5) |
| Hotel | 100 | 100/(1000-5-10) |
| Gift card | 200 | 200/(1000-5-10-100) |
| Coupon | 685 | 685/(1000-5-10-100-200) = 1/1 |
这个解决方案是可行的,通过给每个礼物添加一个系数(无人机、桌子和酒店必须有20%的机会出来,礼品卡和优惠券减少30%的机会),我也可以处理更复杂的情况。
我的问题是:有没有更好、更公平、更简单的方式来分发这些礼物?
编辑1:均匀分发意味着随机,例如,在20%的参与之后,大约有20%的礼物分发出去(1架无人机,2块平板电脑等)。
发布于 2020-02-17 21:30:19
你可以像抽奖一样做:洗牌和挑选。同一种物品可能会被挑选两次或更多次,就像掷骰子的顺序滚动产生相同的数字一样,这就是随机的工作方式:-)
对于在第600次抽奖之前应该抽奖的情况,把所有这些奖品连同足够多的其他奖品放在一个名单中,然后再洗牌。洗牌剩下的400,并连接被洗牌的列表。
https://softwareengineering.stackexchange.com/questions/405347
复制相似问题