处理变化概率系统的高效算法

时间:2016-12-05 20:05:11

标签: python algorithm redis

我在制定算法时需要帮助。我有一个用python构建的社交网络应用程序,带有redis后端。其中一项功能是广告服务器,广告客户可以使用该广告服务器为网站用户创建和投放广告。

广告客户购买点击次数。每次点击费用不固定。一个广告客户可以支付1美分/点击,另一个可以支付2美分/点击等。广告客户支付的越多,她的广告被显示的概率就越大。即,付费较高的广告客户获得点击更快,其他条件相同。

E.g。想象广告客户1为1000次点击支付10美元,广告客户2为1000次点击支付20美元,广告客户3为1000次点击支付30美元。所有其他情况相同,在每次广告展示时,广告客户1的广告将有1/6的概率出现,广告客户2的广告将有2/6的概率出现和广告客户3的广告将有3/6的概率出现。如果将第四个广告客户添加到组合中,概率将会进行修改。一旦达到广告客户的指定点击次数,就会将其从混合中删除,并再次修改概率。

如何在高效的算法中建模?

在尝试对此进行建模时遇到困难的一个原因是,在添加(或减去)广告客户时,整个系统的概率会得到即时修改。我还没有能够绕过这个;希望专家可以提供帮助。

1 个答案:

答案 0 :(得分:1)

作为购买广告位的广告客户,我个人不确定我是否愿意支付广告展示的不确定概率。最接近我能想象到的合理的东西(可能是你想到的),只是保证那些支付相同费率的人获得相同的概率。一个有效的方法是保持支付的费率的累积总和,以给出你的随机范围:

cumsum, rate, company

1,  1,  A
2,  1,  B
4,  2,  C
8,  4,  D

如果您生成0到7(或1到8)的随机数,则可以进行二分搜索(O log(n))以确定应显示哪个广告。

如果你让公司按照费率排序,你甚至可能做得比(O log(n))更好......也许

添加和减去公司会相对简单:为公司和费率添加(或减去)一行,然后重新计算cumsum。