我目前正在为我的新网站编写算法,我计划很快推出。索引页面将显示当前“最热门”的帖子。 要考虑的变量是:
我提出了两种可能的算法,第一种也是最简单的算法是:
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
最高的号码是最热门的
第一种算法将允许较旧的帖子在将来再次变得“热”,而第二种算法则不会。
所以我的问题是,您认为这两种算法中的哪一种更有效?您认为哪一个会显示真正的“热门”主题?你能想到使用一个优于另一个的优点或缺点吗?我只是想确保我不忽视任何事情,这样我才能确保内容尽可能相关。任何反馈都会很棒!谢谢!
答案 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)
您可能有几类热门:
所以,&#39;最后一个[无论如何]最热门&#39;可以像这样计算:
votes_for_topic_in_timeframe / all_votes_in_timeframe
如果你特别想要一个介于0和1之间的数字(对于跨类别比较很有用),或者,如果你只想要特定时间范围内的数字,只需取votes_for_topic_in_timeframe
个值并按降序排序。 / p>
如果您不希望用户明确选择时间范围,您可能想要计算所有(比如说)四个版本(或者可能只是前三个版本),为每个类别分配一个乘数以给每个类别一个相对重要性,并计算每个主题的总值,以取得最高 n 。这样做的好处是可能会向用户隐瞒在过去一小时内没有人投票;)