6

我正在构建一个高级图像共享 Web 应用程序。正如您所料,用户可以上传图片,其他人可以评论、投票和收藏。这些事件将决定我在“业力”领域中捕捉到的图像的受欢迎程度。

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

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

具体问题:

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

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

4

4 回答 4

2

我会使用一个功能,在给定的时间过去后减少每个项目的“有效业力”。这有点像 Eric 的方法。

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

effective karma = karma * (1 - percentage_decrease)

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

percentage_decrease = min(1, number_of_hours_since_posting / 24)

使每个项目的有效业力在 24 小时内减少到 0。然后使用有效的业力来确定要显示的图像。这比仅仅减去发布后的时间更稳定一点,因为它将业力在 0 与其实际值之间缩放。最小值是将缩放保持在 0 的下限,随着一天过去,您将开始获得大于 1 的值。

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

于 2010-04-26T19:01:02.367 回答
1

对于您的第一个问题,我会采用稍微复杂一点的方法。你会想要一些“所有时间的最爱”。但不要只看时间,要看图像的实际观看次数。请记住,不是每个人都会登录并投票,但这并不会降低图像的受欢迎程度。一张两年前有 10 票和 100k 浏览量的图像对人们来说显然比一张 1 岁有 100 票和 1k 浏览量的图像更重要。

对于第二个问题,是的,您希望在首页进行某种缓存。产生进入您网站的入口点需要进行大量查询。然而,很像 SO,您的网站类型往往会通过搜索引擎将流量吸引到内页.. 所以请尝试在任何地方观察/优化您的查询。

对于您的第三个问题,按时间以外的因素(即查看次数)有助于确保您始终拥有一个完整且动态的页面。我不确定在首页上进行分页,将人们引导至标签或搜索可能是更好的策略。

于 2010-04-26T18:46:45.780 回答
0

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

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

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

于 2010-04-26T18:46:25.540 回答
0

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

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

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

于 2010-04-26T18:53:02.413 回答