我正在构建一个高级图像共享Web应用程序。如您所料,用户可以上传图像,其他人可以在其上发表评论,对其进行投票并喜欢。这些事件将决定图像的普及,我在“业力”领域中捕获了图像。

现在,我想创建一个类似DIGG的首页系统,显示最受欢迎的图像。这很容易,因为我已经有了加权业力得分。我只是对此进行排序,以显示20个最有价值的图像。

缺少的部分是 时间. 。我不希望非常受欢迎的图像始终在主页上。我想一个简单的解决方案是将结果设置限制为过去24小时。但是,我还认为,为了使图像旋转全天发生,时间可能是某种变量,而其偏移会影响图像的排序。

具体问题:

  • 您是否会推荐简单的方案(只需在24小时内排序最佳图像)还是更复杂的方案(使用DateTime偏移量作为排序的一部分)?如果您建议后者,那么对此的数学解决方案有任何帮助吗?
  • 最好运行计划的服务以标记主页的图像,或者您建议直接查询(我正在使用mySQL)
  • 另外,主页应支持分页,在安静的日子里应该包括前几天的条目,以确保它始终“填充”

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

有帮助吗?

解决方案

我会使用一个函数,该功能在给定的时间段时降低了每个项目的“有效业力”。这有点像Eric的方法。

确定您希望“有效的业力”减少多久。然后根据此期间将业力乘以缩放因子。

effective karma = karma * (1 - percentage_decrease)

在哪里 percentage_decrease 由您的功能决定。例如,你可以做

percentage_decrease = min(1, number_of_hours_since_posting / 24)

为了使其有效的业力在24小时内降至0。然后使用有效的业力确定要显示的图像。这是一个稳定的解决方案,而不仅仅是减去发布以来的时间,因为它可以在0及其实际值之间扩展业力。最小的是将缩放率保持在0下限,因为每天一次,您将开始获得大于1的值。

但是,这并没有考虑到严格的意义。蒂姆的答案给出了一些想法,即如何考虑严格的普及(即页面视图)。

其他提示

对于您的第一个问题,我将使用更复杂的方法。您将需要一些“有史以来的最爱”。但是不要独自一人去,按照实际数量 视图 图像具有。请记住,并不是每个人都会登录并投票,但这并不能使图像变得不那么受欢迎。一张两年有10票和100k次观点的图像对人来说显然比1岁的图像更重要,该图像具有100票和1k的观点。

对于您的第二个问题,是的,您希望在首页中进行某种缓存。将入口点引入您的网站是很多疑问。但是,就像这样,您的网站类型将倾向于通过搜索引擎吸引内部页面。因此,请尝试观看 /优化各地的查询。

对于您的第三个问题,按时间以外的其他因素(即视图#)来帮助确保您始终拥有完整而动态的页面。我不确定要在首页上进行小玩意,导致人们进入标签或搜索可能是更好的策略。

您可以仅计算一个“调整后的业力”类型字段,该字段将考虑时间:

adjusted karma = karma - number of hours/days since posted

然后,您可以在查询中直接计算和排序,也可以将其作为数据库中的实际字段,以通过夜间过程或其他内容进行更新。就我个人而言,我会进行每晚进行更新的过程,因为这可能会使将来使该算法更加复杂变得更加复杂。

我找到了这个, Lower bound of Wilson score confidence interval for a Bernoulli parameter

看这个: http://www.derivante.com/2009/09/01/php-content-rating-confidence/

在第二个示例中,他解释了如何将时间用作“新鲜度因素”。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top