流行内容的Digg式旋转主页,如何将日期作为一个因素包括在内?

Fer*_*Fer 6 php sorting digg

我正在构建一个高级图像共享Web应用程序.正如您所料,用户可以上传图像,其他人可以对其进行评论,对其进行投票,并对其进行投票.这些事件将决定图像的流行程度,我在"业力"字段中捕获.

现在我想创建一个类似Digg的主页系统,显示最流行的图像.这很容易,因为我已经有加权的Karma分数.我只是在下降,以显示20个最有价值的图像.

缺少的部分是时间.我不希望非常流行的图像总是在主页上.我想一个简单的解决方案是将结果集限制为过去24小时.但是,我也在想,为了保持图像旋转全天,时间可以是某种变量,其偏移对图像的排序有影响.

具体问题:

  • 您会推荐简单的场景(只是在24小时内对最佳图像进行排序)或更复杂的场景(使用日期时间偏移量作为排序的一部分)?如果你建议后者,对此数学解决方案的任何帮助?
  • 最好是运行预定服务来标记主页的图像,还是建议直接查询(我正在使用MySQL)
  • 作为额外的注释,主页应该支持分页,在安静的一天应该包括前几天的条目,以确保它总是"填充"

我不是要求社区构建这个算法,只是寻找一些建议:)

Mic*_*old 2

我会选择一个函数,在给定的时间过后,减少每个项目的“有效业力”。这有点像Eric的方法。

确定您希望“有效业力”减少的频率。然后将业力乘以基于该周期的比例因子。

effective karma = karma * (1 - percentage_decrease)
Run Code Online (Sandbox Code Playgroud)

其中percentage_decrease由您的功能决定。例如,你可以这样做

percentage_decrease = min(1, number_of_hours_since_posting / 24)
Run Code Online (Sandbox Code Playgroud)

使每件物品的有效业力在24小时内降至0。然后使用有效业力来确定要显示哪些图像。这比仅仅减去发布后的时间更稳定,因为它将 karma 缩放到 0 和实际值之间。最小值是将缩放比例保持在 0 下限,因为一天过去后,您将开始获得大于 1 的值。

然而,这并没有考虑严格意义上的受欢迎程度。蒂姆的回答给出了一些关于如何考虑严格流行度(即页面浏览量)的想法。