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