2

我试图想出一种方法来确定论坛中某些线程的“热度”。你会使用什么标准,为什么?这些将如何结合在一起给出热度分数?

我正在考虑的标准包括:

  • 有多少回复
  • 距离上次回复多长时间
  • 回复之间的平均时间

该算法必须解决的问题:

  • 一个有 500 条回复的帖子显然很热门,除非最后一次回复是一年多以前。
  • 一秒钟前回复了 500 条回复的帖子显然很热门,除非它需要 4 年才能达到 500 条回复。
  • 最后4分钟有15条回复的帖子真的很火!

有什么想法、想法或完整的解决方案吗?

4

7 回答 7

2

Jeff Atwood 对此有一个很好的问题,他提供了大量关于其他“热门”算法的信息。我建议使用其中一种并根据自己的喜好进行调整。

于 2008-12-19T14:51:10.787 回答
1

最简单的算法:如果自 Y 以来有超过 X 个回复,则它是热的。

如果您更喜欢可扩展的内容,只需计算自 y 时间以来的回复次数。更多的回复意味着更多的热度。

于 2008-12-19T14:49:11.603 回答
0

感谢那些发布指向其他问题/答案的链接的人。不幸的是,这些方程式比我的设置考虑的要多得多(例如:投票、作者的声誉等)

在玩弄它之后,我想出了这个等式,我将暂时使用它:

log10($numOfReplies * 20000 / pow($timeSinceLastPost, 1.3))

它仍然可以使用一些工作。例如,如果有一个非常流行但很老的帖子,它的热度会很低,但如果有人回复它,它就会在几天/几周内回到顶部。

于 2008-12-19T16:16:08.853 回答
0

为什么不只使用一种指数衰减模型。所有帖子的线程热度=总和(k^(自发布以来的时间))。这具有非常容易更新和计算的优点。您必须使用 k 和您的时间测量单位(k 应该 < 1,但相当接近)

当前热度 = 上次发帖时的热度 * k^(自上次发帖以来的时间)。
新帖后热度 = 当前热度 + 1

于 2008-12-19T16:33:02.143 回答
0

您应该注意的一件事是人们是否可能想要“玩弄”算法以使/保持他们的线程“热”。实际上,您几乎可以假设他们会这样做。

阻止这种情况的最低限度是只考虑来自不同人的回复。

于 2010-04-16T05:44:40.897 回答
0

我在想你可以在这里用递减的波来模拟它,使用幅度(或均方根)来测量热度。随着时间的流逝,浪潮逐渐减弱,因此迟到的回复只会引起一点轰动。

在实践中,我认为这需要大量的计算。您可以充分利用缓存来加快计算速度。

只是我的两分钱。

于 2008-12-19T14:48:58.357 回答
0

简而言之,我发现“热度”的对数衰减是最自然的。

于 2008-12-19T14:50:35.577 回答