我正在设计一个广告系统,根据广告的重量(出价)在广告之间随机轮播。
local ads = local ads = {
["a"] = {
views = 0,
bid = 10
},
["b"] = {
views = 0,
bid = 1000
},
["c"] = {
views = 0,
bid = 100
},
["d"] = {
views = 0,
bid = 50
},
["e"] = {
views = 0,
bid = 500
},
["f"] = {
views = 0,
bid = 10
},
}
我四处搜索并找到了以下算法:
- 获取所有加权数字的总和
- 选择0和总和之间的随机数
- 循环表(广告)和if(随机数)< = weight然后返回ad else random number =随机数 - weight
醇>
使用该算法并循环1,000次打印
a 3
c 60
b 581
e 313
d 35
f 8
这很好。但是正如你所看到的那样,即使权重(竞标)相同,广告f也几乎获得了3倍的观看次数。
我还尝试通过考虑广告已经获得的观点来使算法更公平。我通过减少每个视图的重量来做到这一点。
我无法让它工作,我想知道是否有人可以帮助我?
答案 0 :(得分:0)
如果你想确保每个人都能获得恰到好处的比例,你可以使用这个算法 - 它需要大量的内存:
sum
的数组
当您用完元素时,您可以使用相同的数组重新开始或重新创建数组。无论如何,每当权重发生变化时,您都需要重新创建数组。