基于用户投票的排名算法解析 —— Delicious与Hacker News
一、Delicious的排名算法
Delicious 是一个基于用户书签的内容分享平台,它使用的排名算法非常直观——通过单位时间内用户的投票(收藏)数来确定排名。具体来说,Delicious 会统计过去60分钟内被收藏的次数,得票最多的条目排名靠前。每60分钟,系统更新一次热门内容的榜单。
优点:
- 简单易用:该算法易于理解和实现,适合快速部署。
- 快速更新:由于它按照时间单位统计,内容更新较快,可以有效反映最新的用户兴趣。
缺点:
- 排名变化不平滑:由于每60分钟统计一次,某篇内容可能在一个小时内排名靠前,但下一个小时如果没有新投票,就可能瞬间跌落,排名不稳定。
- 缺乏淘汰机制:一些热门内容可能长期占据榜单前列,无法有效反映用户对最新内容的关注。
二、Hacker News的排名算法
Hacker News 是一个讨论和分享内容的社区。与 Delicious 类似,它的排名也基于用户投票数,但 Hacker News 的算法更为复杂,它不仅考虑得票数,还加入了时间因素,确保新发布的内容有更多机会出现在前列。
Hacker News 的排名算法可以用以下公式来描述:
其中:
- P:帖子得票数,减去1是为了忽略发帖人的投票;
- T:距离发帖的时间,单位为小时,+2是为了防止最新的帖子得分过高;
- G:重力因子,控制排名下降的速度,默认值为1.8。
因素解析:
- 得票数 (P):得票数越多,帖子排名越高,但其影响力会被时间削弱。
- 时间 (T):帖子随着时间的推移,排名会逐渐下降,确保较新的内容更有机会展示在用户面前。
- 重力因子 (G):G 值越大,排名下降得越快,更新速度越快。可以根据需求调整 G 的值来控制榜单的更新频率。
优点:
- 时效性强:时间因素的引入确保了较新的内容更有机会被用户看到,防止旧内容长期占据高位。
- 动态调整:得票数和时间的结合能够实时反映内容的受欢迎程度,同时保持排名的动态性。
缺点:
- 实现复杂:相较于 Delicious 的简单算法,Hacker News 的算法需要考虑多个参数的调节,增加了实现难度。
- 可能忽略高质量老内容:随着时间推移,老的高质量内容可能逐渐被系统淘汰。
第一个因素是得票数P。
在其他条件不变的情况下,得票越多,排名越高。
从上图可以看到,有三个同时发表的帖子,得票分别为200票、60票和30票(减1后为199、59和29),分别以黄色、紫色和蓝色表示。在任一个时间点上,都是黄色曲线在最上方,蓝色曲线在最下方。
如果你不想让"高票帖子"与"低票帖子"的差距过大,可以在得票数上加一个小于1的指数,比如(P-1)^0.8。
第二个因素是距离发帖的时间T。
在其他条件不变的情况下,越是新发表的帖子,排名越高。或者说,一个帖子的排名,会随着时间不断下降。
从前一张图可以看到,经过24小时之后,所有帖子的得分基本上都小于1,这意味着它们都将跌到排行榜的末尾,保证了排名前列的都将是较新的内容。
第三个因素是重力因子G。
它的数值大小决定了排名随时间下降的速度。
从上图可以看到,三根曲线的其他参数都一样,G的值分别为1.5、1.8和2.0。G值越大,曲线越陡峭,排名下降得越快,意味着排行榜的更新速度越快。
三、总结与对比
算法 | 主要依据 | 优点 | 缺点 |
---|---|---|---|
Delicious | 单位时间内的得票数 | 简单易用,更新快 | 排名不稳定,热门内容长期占据榜单 |
Hacker News | 得票数与时间的综合考虑 | 兼顾时效性,动态调整 | 实现复杂,忽略老内容 |
Delicious 适合那些需要快速展示用户喜好变化的场景,适合内容更新较快但用户不多的系统。而 Hacker News 的算法则在时效性和用户参与度较高的社区中表现更加优秀,适合需要综合考虑得票数与时间因素的环境。
结论
在个人博客或小型内容平台中,Delicious 的算法可以帮助快速展示最新的热门内容,适合信息流量较小、更新较频繁的场景。而在像 Hacker News 这样的讨论社区中,综合考虑得票数与时间的排名算法则能更好地反映用户的兴趣变化,确保时效性和质量并存。