我正在构建一个高级图像共享Web应用程序。如您所料,用户可以上传图像,其他人可以对其进行评论,投票和收藏。这些事件将确定图像的受欢迎程度,这是我在“业力”字段中捕获的。
现在,我想创建一个类似于Digg的主页系统,以显示最受欢迎的图像。这很容易,因为我已经获得了加权Karma评分。我只是按降序排序以显示20个最有值(value)的图像。
缺少的部分是时间。我不希望非常受欢迎的图像始终出现在主页上。我猜一个简单的解决方案是将结果集限制为最近24小时。但是,我还认为,为了使图像整天保持旋转,时间可以是某种变量,其偏移量会影响图像的排序。
具体问题:
我不是在要求社区构建此算法,只是在寻找一些建议:)
最佳答案
我会使用一个函数,该函数会在给定的时间量过去之后减少每个项目的“有效业力”。这有点像埃里克的方法。
确定您希望减少“有效业力”的频率。然后将业力乘以基于该周期的比例因子。
effective karma = karma * (1 - percentage_decrease)
percentage_decrease
由您的功能决定。例如,您可以percentage_decrease = min(1, number_of_hours_since_posting / 24)
以使每个物品的有效业力在24小时内降低到0。然后使用有效业力确定要显示的图像。这不仅是减去自发布以来的时间,而且还更稳定的解决方案,因为它可以在0和实际值之间调整业力。最小值是将缩放比例保持在0的下限,随着一天的流逝,您将开始获得大于1的值。
但是,从严格意义上讲,这并未考虑流行性。蒂姆(Tim)的回答为如何考虑严格的流行度(即网页浏览量)提供了一些思路。
关于php - 流行内容的类似Digg的旋转首页,如何将日期作为因素?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2715941/