首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >高效、公平地将多个不同数量的物品均匀分配

高效、公平地将多个不同数量的物品均匀分配
EN

Software Engineering用户
提问于 2020-02-17 17:29:38
回答 1查看 443关注 0票数 2

我正在开发小型彩票游戏,参与者可以从中赢得许多礼物中的一个,每一个都有不同的数量。(代码在PHP中)

简单场景:

我有5种类型的礼物,总共1000种,我期待着1000个参与者。我可以用什么算法来确保这1000件礼物的分布比较均匀。时间并不重要。

参差不齐:先送出2架无人机,然后是10片,等等.

代码语言:javascript
运行
复制
| Title     | Quantity |
|-----------|----------|
| Drone     | 5        |
| Tablet    | 10       |
| Hotel     | 100      |
| Gift card | 200      |
| Coupon    | 685      |

更复杂的场景:

我有相同的礼物和礼物数量,但我预计600人参加。我希望无人驾驶飞机、平板电脑和酒店之夜都能在第600次参展之前发布。

因此,剩下400张(礼品卡+优惠券),如果剩下的百分比相同,则更好: 116张礼品卡(200/685=29%)和284张优惠券(71%)。

我尝试了什么:

对于第一个场景,我尝试使用这些概率,然后依次遍历这5份礼物:

  • 每件礼物都有自己的柜台。

  • 当礼物被考虑到的时候,礼物的柜台会增加

  • 如果礼物的柜台是== originalQuantity,就会收到礼物

  • 当送礼物的时候,这个循环从无人机开始。
代码语言:javascript
运行
复制
| 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块平板电脑等)。

EN

回答 1

Software Engineering用户

回答已采纳

发布于 2020-02-17 21:30:19

你可以像抽奖一样做:洗牌和挑选。同一种物品可能会被挑选两次或更多次,就像掷骰子的顺序滚动产生相同的数字一样,这就是随机的工作方式:-)

对于在第600次抽奖之前应该抽奖的情况,把所有这些奖品连同足够多的其他奖品放在一个名单中,然后再洗牌。洗牌剩下的400,并连接被洗牌的列表。

票数 3
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/405347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档