我目前面临着有趣的算法问题,我正在寻找想法或可能的解决方案。话题似乎很常见,所以也许它是已知的并已解决,但我无法找到它。

所以让我们假设我正在经营商店并且
我正在为购买客户制作 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/

    10-12 19:33