确定线程“热度”的算法

时间:2008-12-19 14:45:30

标签: algorithm forum

我正试图想出一种方法来确定论坛中某些线程的“热门”程度。你会用什么标准?为什么?这些怎么会聚在一起给出热情分数?

我正在考虑的标准包括:

  • 有多少回复
  • 自上次回复以来多久
  • 回复之间的平均时间

此算法必须解决的问题:

  • 一个有500个回复的帖子显然很热,除非最后一个回复超过一年。
  • 一个回复了500回复的帖子显然很热,除非需要4年才能达到500回复。
  • 过去4分钟内有15个回复的帖子真的很热!

那里有任何想法,想法或完整的解决方案吗?

8 个答案:

答案 0 :(得分:4)

这可能就是你要找的东西:

Popularity algorithm

答案 1 :(得分:2)

杰夫阿特伍德a nice question对此有大量关于其他“热门”算法的信息。我建议使用其中一种,并根据自己的喜好进行调整。

答案 2 :(得分:1)

最简单的算法: 如果自Y以来有大于X的回复,那就太热了。

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

答案 3 :(得分:0)

我原本以为你可以用缩小波来模拟它,用振幅(或均方根)来测量热度。随着时间的推移,波浪会减少,所以迟到的回复只会引起一些轰动。

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

只是我的两分钱。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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

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

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

它仍然可以使用一些工作。例如,如果有一个非常受欢迎但很老的帖子,那么它的热度就会很低,但是如果有人回复它会让它在几天/几周内重新回到顶部。

答案 6 :(得分:0)

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

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

答案 7 :(得分:0)

你应该注意的一件事是,人们是否可能想要“游戏”算法以使其线程变得“热”。实际上,你几乎可以认为他们会这样做。

您应该采取的最低限度措施是仅考虑来自不同人的回复。