我试图想出一种方法来确定论坛中某些线程的“热度”。你会使用什么标准,为什么?这些将如何结合在一起给出热度分数?
我正在考虑的标准包括:
- 有多少回复
- 距离上次回复多长时间
- 回复之间的平均时间
该算法必须解决的问题:
- 一个有 500 条回复的帖子显然很热门,除非最后一次回复是一年多以前。
- 一秒钟前回复了 500 条回复的帖子显然很热门,除非它需要 4 年才能达到 500 条回复。
- 最后4分钟有15条回复的帖子真的很火!
有什么想法、想法或完整的解决方案吗?
Jeff Atwood 对此有一个很好的问题,他提供了大量关于其他“热门”算法的信息。我建议使用其中一种并根据自己的喜好进行调整。
最简单的算法:如果自 Y 以来有超过 X 个回复,则它是热的。
如果您更喜欢可扩展的内容,只需计算自 y 时间以来的回复次数。更多的回复意味着更多的热度。
感谢那些发布指向其他问题/答案的链接的人。不幸的是,这些方程式比我的设置考虑的要多得多(例如:投票、作者的声誉等)
在玩弄它之后,我想出了这个等式,我将暂时使用它:
log10($numOfReplies * 20000 / pow($timeSinceLastPost, 1.3))
它仍然可以使用一些工作。例如,如果有一个非常流行但很老的帖子,它的热度会很低,但如果有人回复它,它就会在几天/几周内回到顶部。
为什么不只使用一种指数衰减模型。所有帖子的线程热度=总和(k^(自发布以来的时间))。这具有非常容易更新和计算的优点。您必须使用 k 和您的时间测量单位(k 应该 < 1,但相当接近)
当前热度 = 上次发帖时的热度 * k^(自上次发帖以来的时间)。
新帖后热度 = 当前热度 + 1
您应该注意的一件事是人们是否可能想要“玩弄”算法以使/保持他们的线程“热”。实际上,您几乎可以假设他们会这样做。
阻止这种情况的最低限度是只考虑来自不同人的回复。
我在想你可以在这里用递减的波来模拟它,使用幅度(或均方根)来测量热度。随着时间的流逝,浪潮逐渐减弱,因此迟到的回复只会引起一点轰动。
在实践中,我认为这需要大量的计算。您可以充分利用缓存来加快计算速度。
只是我的两分钱。
简而言之,我发现“热度”的对数衰减是最自然的。