反馈我网站的排名算法选项

时间:2012-11-13 17:22:05

标签: algorithm math ranking

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

  • 票数
  • 这个帖子有多争议(#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

最高的号码是最热门的

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

所以我的问题是,您认为这两种算法中的哪一种更有效?您认为哪一个会显示真正的“热门”主题?你能想到使用一个优于另一个的优点或缺点吗?我只是想确保我不忽视任何事情,这样我才能确保内容尽可能相关。任何反馈都会很棒!谢谢!

3 个答案:

答案 0 :(得分:0)

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

例如,如果我有两个帖子 - P1和P2(两者同样有争议)。假设P1有numVotesTotal = 20,P2有numVotesTotal = 1000.现在在最后一个小时P1得到numVotesThisHour = 10而P2得到numVotesThisHour = 200。

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

答案 1 :(得分:0)

我认为第一种算法过于依赖瞬时趋势。想想NASCAR,目前的领导者可能会进入0 m.p.h.因为他在一个进站。第二个使用平均趋势的概念。我认为两者都有它们的用途。

因此,对于总票数和争议评分相同的两个帖子,但是其中一个帖子在第一个小时内收到20票,在第二个小时收到零,而另一个在每小时收到10个。第一个帖子将被第一个算法掩埋,但第二个算法将对它们进行相同的排名。

答案 2 :(得分:0)

是的YMMV,但我认为&#39; hotness&#39;除非你的时间框架是“所有时间”,否则完全取决于时间范围,而不是总票数。此外,在我看来,相关时间范围内所有投票的比例,而不是它们的绝对数量,是重要数字。

您可能有几类热门:

  • 这个时间最热
  • 本周最热门
  • 自上次访问以来最热门的
  • 最热门

所以,&#39;最后一个[无论如何]最热门&#39;可以像这样计算:

votes_for_topic_in_timeframe / all_votes_in_timeframe

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

如果您不希望用户明确选择时间范围,您可能想要计算所有(比如说)四个版本(或者可能只是前三个版本),为每个类别分配一个乘数以给每个类别一个相对重要性,并计算每个主题的总值,以取得最高 n 。这样做的好处是可能会向用户隐瞒在过去一小时内没有人投票;)