【问题标题】:Algorithm to determine thread "hotness"确定线程“热度”的算法
【发布时间】:2008-12-19 14:45:30
【问题描述】:

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

我考虑的标准包括:

  • 回复数
  • 距离上次回复多长时间了
  • 回复之间的平均时间

这个算法必须解决的问题:

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

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

【问题讨论】:

标签: algorithm forum


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      只要我的两分钱。

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

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

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

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

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

          【讨论】:

            【解决方案6】:

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

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

            【讨论】:

              【解决方案7】:

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

              你应该做的最低限度是只考虑来自不同人的回复。

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2017-04-08
                • 2021-10-27
                • 2018-01-11
                • 2012-09-16
                • 1970-01-01
                • 1970-01-01
                • 2011-03-01
                • 1970-01-01
                相关资源
                最近更新 更多