6

我目前正在为我计划很快推出的新网站编写算法。索引页面将显示当前“最热门”的帖子。要考虑的变量是:

  • 票数
  • 帖子的争议程度(# 介于 0-1 之间)
  • 自发布以来的时间

我想出了两种可能的算法,第一种也是最简单的是:

controversial * (numVotesThisHour / (numVotesTotal - numVotesThisHour)
Denom = numVotesTuisHour if numVotesTotal - numVotesThisHour == 0

最高的数字是最热的

我的另一个选择是使用类似于 Reddit 的算法(除了分数随着时间的推移而降低):

[controversial * log(x)] - (TimePassed / interval)
x = { numVotesTotal if numVotesTotal >= 10, 10 if numVotesTotal < 10

最高的数字是最热的

第一个算法将允许较旧的帖子在未来再次变得“热门”,而第二个则不会。

所以我的问题是,你认为这两种算法中哪一种更有效?你认为哪一个会展示当下真正“火爆”的话题?您能想到使用其中一种的优点或缺点吗?我只是想确保我不会忽略任何内容,以便确保内容尽可能相关。任何反馈都会很棒!谢谢!

4

3 回答 3

0

我是不是错过了什么。在第一个公式中,分母中有 numVotesTotal。因此,更高的票数意味着它永远不会那么热,即使它不是那么老。

例如,如果我有两个帖子 - P1 和 P2(都同样有争议)。假设 P1 的 numVotesTotal = 20,P2 的 numVotesTotal = 1000。现在在过去的一小时内,P1 的 numVotesThisHour = 10,P2 的 numVotesThisHour = 200。

根据算法,P1 比 P2 更出名。这对我来说没有意义。

于 2012-11-13T17:49:17.930 回答
0

我认为第一个算法过于依赖瞬时趋势。想想 NASCAR,目前的领导者可能会以 0 英里/小时的速度行驶,因为他在进站。第二个使用平均趋势的概念。我认为两者都有其用途。

因此,对于两个具有相同总票数和有争议评分的帖子,但其中一个帖子在第一小时获得 20 票,第二小时获得 0 票,而另一个帖子每小时获得 10 票。第一个帖子将被第一个算法掩埋,但第二个算法将对它们进行平均排名。

于 2012-11-13T19:25:58.413 回答
0

YMMV,但我认为“热度”完全取决于时间框架,而不是总票数,除非你的时间框架是“所有时间”。此外,在我看来,相关时间范围内所有选票的比例,而不是绝对数量,才是重要的数字。

您可能有几类热点:

  • 这个小时最热
  • 本周最热
  • 自您上次访问以来最热
  • 史上最热

因此,“最近 [whatever] 中最热的”可以这样计算:

votes_for_topic_in_timeframe / all_votes_in_timeframe

如果您特别想要一个介于 0 和 1 之间的数字(对于跨类别比较很有用),或者,如果您只想要特定时间范围内的数字,只需votes_for_topic_in_timeframe取值并按降序排序。

如果您不希望用户明确选择时间范围,您可能需要计算所有(例如)四个版本(或者可能只是前 3 个),为每个类别分配一个乘数以赋予每个类别相对重要性,然后计算每个主题的总值取前n位。这样做的好处是可能会向用户隐藏过去一小时内根本没有人投票的情况;)

于 2015-10-09T07:11:06.837 回答