我有一个项目清单。用户偶尔可以选择它们。现在我想根据它们的受欢迎程度来订购这些物品。对此有什么好的加权功能?
约束:
答案 0 :(得分:3)
现在我想根据他们的受欢迎程度订购商品。
所以你按照一些用户选择项目的次数进行排序。
重量应在
[0,1)
。
很好,除以某个用户选择某个项目加一个的总次数。
优先采用递归计算
为什么呢?也许我错过了你想要做的事情,因为否则这种约束对我来说就失去了。
编辑:
回复您的修改,请尝试
sum ( 1 / age of vote ) / age of item
对于给定项目的所有投票所得的总和。
答案 1 :(得分:1)
如果你有一个每个项目的投票计数器,你可以使用'衰落常数',以使旧的投票随着时间“消失”。类似的东西:
Nvotes(i) = IsClicked(i) + Nvotes(i) * Kfade
其中:0 < Kfade < 1
因此,每当拦截一个新的点击时,所有计数器都会被提前,只有所选的项目增加1。
编辑:由于总数小于1,您可能希望按目前的总点击次数对Nvotes进行标准化。
答案 2 :(得分:0)
保留需要排序的项目列表items
。让每个项目都有一个分数。按照新近度降低的顺序,保留N个最近点击的列表clicks
。每个项目都可以在列表中出现多次。选择一个小于1的常量fade
。然后执行:
for item in items:
item.score = 0.0
bonus = 1.0
for item in clicks:
item.score += bonus
bonus *= fade
现在按分数对项目进行排序,先排序最高。
得分不在0到1的范围内,但我不明白为什么你真的需要它。之后将分数标准化将是直截了当的。
这不是递归的,但是以递归形式输入是直截了当的。
这不是已知的算法。我不知道任何已知的算法,除了从前到前移动,这几乎肯定比你想要的更具侵略性。