说起帖子排名, 最简单粗暴的方法就是按照某个指标进行排序, 比如被点赞最多/分享最多/收藏最多/等等.
但这有个问题, 某些热门帖子可能长期占据排名前列.
对此如果加上一个时间限制来避免, 比如按照最近 N 小时被点赞最多来排序, 这又可能面临这样的问题: 比如 N小时前还在排名前列的帖子, N小时后可能就急速下降或掉出榜单.
那么有没有一个平滑且能保持一定时间新鲜度的排序方法呢 ?
HackerNews
Hacker News 以前的排名算法是这样的:
Score = (P-1) / (T+2)^G
其中, P 是得票数, 减1是去除提交者的投票.
T 是提交后的时间(小时计算).
G 是重力因子, 默认是 1.8
.
从公式可知:
其他条件相同时, 得票数较高者, 最终得分较高.
其他条件相同时, 发帖时间较长者, 最终得分较低.
其他条件相同时, 重力因子较大者, 最终得分较低.
画图出来:
这三个因子, 根据自己的业务特点进行调整, 比如修改各个因子的值, 或者微调计算公式等等.
参考
https://www.ruanyifeng.com/blog/2012/02/ranking_algorithm_hacker_news.html
https://medium.com/hacking-and-gonzo/how-hacker-news-ranking-algorithm-works-1d9b0cf2c08d
How Hacker News ranking really works: scoring, controversy, and penalties