我目前面临着有趣的算法问题,我正在寻找想法或可能的解决方案。话题似乎很常见,所以也许它是已知的并已解决,但我无法找到它。
所以让我们假设我正在经营商店并且
我正在为购买客户制作 lottery
。每次买东西都可以中奖。
X prizes
和 Y days
equal chance to win
奖励 left
奖品这是不可解决的,最接近的解决方案是什么?
即时奖品分配必须保留。
最佳答案
你试图做的事情是不可能的。一旦您赠送了最后一个奖品,您就无法证明剩余客户数量的任何保证,因此并非所有客户都有平等的机会赢得奖品。
你可以做一些非常接近它的事情。您可以尝试估计您将拥有的客户数量,假设他们分布均匀,然后在比赛进行期间分配奖品。这将为您提供一个比率,您可以使用该比率来判断给定客户是否是赢家。然后随着比赛的进行,更改估算值以匹配您所看到的内容以及剩余的奖品。每 x(小时/分钟甚至客户交易)运行此更新以确保费率不会太低,并且每 q 次奖励以确保费率不会太高。如果奖品被送出,请不要太频繁地运行更新,或者如果有一段低流量时期(比如一夜之间),算法可能会 react 过于强烈。
让我给你举个例子。假设您计算出每小时将接待 100 位客户,并且您应该每 200 位客户就颁发一次奖品。所以大约每2小时1次。 3 小时后您回来,您会看到每小时有 300 位顾客,并且您已经发放了 4 个奖品。因此,您现在可以将预期调整为每小时 300 位客户,并调整分配率以匹配剩余数量。
即使您的初始值太低或太高,这也将起作用。
如果您的估计太远并且您的更新介于两者之间(假设您仅在一天后检查但您已经赠送了所有奖品),这将严重破坏。
这可能会留下奖品。如果您不希望这样,您可以减少程序将比赛视为正在运行的时间,以便它应该在比赛结束前完成奖品。您可以限制给定日期授予的奖品数量,以使分配更加统一(不要将其设置为 X/Y
,而是将其设置为 X/Y * .25
之类的内容,以便有一些变化),并在一天结束时更新限制以进行帐户奖励的变化。
关于algorithm - 奖品分配均匀,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36984730/