【发布时间】:2013-10-13 16:56:54
【问题描述】:
我正在寻找一种算法来按受欢迎程度对网站结果进行排序。就像 Reddit 一样,帖子越旧,其投票/分数的影响力就越小。
这是 reddit 使用的普遍接受的解决方案:
t = (time of entry post) - (Dec 8, 2005)
x = upvotes - downvotes
y = {1 if x > 0, 0 if x = 0, -1 if x < 0)
z = {1 if x < 1, otherwise x}
rank = log(z) + (y * t)/45000
我已经研究过 Reddit 的算法,虽然它适用于一种情况,但我真正需要的是两种算法,一种用于热门帖子,另一种用于即将发布的帖子:
- 热门帖子
- 即将发布的帖子
受欢迎程度会减慢,给稍旧的帖子更多的权重,即将发布的帖子将更多地关注今天的热门帖子,在 N 小时/天/等之后急剧下降。
我正在使用 Sphinx 表达式编写此代码,因此我无法编写极其复杂的算法,并且我只能访问以下函数:
http://sphinxsearch.com/docs/current.html#numeric-functions
所以我每个帖子都有以下数据:
- 以秒为单位的帖子年龄
- 发布分数
这是我目前的解决方案:
Exponent = 0.01 (Popular), 0.5 (Upcoming)
SecondsSincePublised = abs(CurTimeInSecondsSinceDate-PubTimeInSecondsSinceDate)
Rank = (log10(PostScore)*10000) / pow(SecondsSincePublised,Exponent)
虽然这个解决方案确实有效,但它并不理想。在过去的几个小时内,一篇新的热门帖子通常在热门和即将发布的帖子中都排名靠前,这并不是我真正想要的。
谁能建议我可以修改指数分量以调整衰减的另一种算法?
【问题讨论】: