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