我正在构建一个高级图像共享Web应用程序。如您所料,用户可以上传图像,其他人可以对其进行评论,投票和收藏。这些事件将确定图像的受欢迎程度,这是我在“业力”字段中捕获的。

现在,我想创建一个类似于Digg的主页系统,以显示最受欢迎的图像。这很容易,因为我已经获得了加权Karma评分。我只是按降序排序以显示20个最有值(value)的图像。

缺少的部分是时间。我不希望非常受欢迎的图像始终出现在主页上。我猜一个简单的解决方案是将结果集限制为最近24小时。但是,我还认为,为了使图像整天保持旋转,时间可以是某种变量,其偏移量会影响图像的排序。

具体问题:

  • 您会推荐一种简单的方案(仅在24小时之内分类以获得最佳图像)还是一种更复杂的方案(将datetime偏移用作分类的一部分)?如果您建议后者,则对此数学解法有帮助吗?
  • 最好是运行预定的服务来标记主页图像,还是建议直接查询(我正在使用MySQL)
  • 需要特别注意的是,主页应该支持分页,并且在安静的一天应该包括前几天的条目,以确保它始终被“填充”。

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

    最佳答案

    我会使用一个函数,该函数会在给定的时间量过去之后减少每个项目的“有效业力”。这有点像埃里克的方法。

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

    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/

    10-08 22:33