实现一个内容系统的问答排名,了解一下几个经典的算法
hacker news的排名算法
hacker news上面的热度排名多年以来能够很好的反映绝大多数用户的喜好,热度比较高的的文章也不会一直出现在前列,从而导致没有新的内容被关注,
他们会按照文章的票数多少和发布时间对文章进行一些逻辑处理得到对应的热度排序。
Score=(P−1)(T+2)G S c o r e = ( P − 1 ) ( T + 2 ) G
- P:投票数,-1是把自己投的过滤掉
- T:发布到现在的时间间隔,单位小时,+2防止除数太小
- G:重力加速度,它的数值大小决定了排名随时间下降的速度快慢
通俗点的例子
- 热度=(浏览量-1)/(发布到现在的时间间隔+2)乖以G的平方
列表排序由热度决定,热度是由浏览量、作品发布的时间间隔、G值共同决定
为什么这样好呢?
能够根据浏览量过滤出同时发布的一批作品集中的热度作品,因为他们的分母相同,而分子大的热度肯定大。
能够过滤出不同时间段热度高的作品,避免误差
举例:
a在1号发表了作品aa,aa被点击了101次,
b在2号发表了作品bb,bb被点击了51次,在3号比较他们的热度,此处G取2
aa的热度=(101-1)/(48+2)^2 = 0.04
bb的热度=(51-1)/(24+2)^2=0.07
这里bb热度>aa热度 ,但是我们会感觉2个其实热度应该一样
当然,不同情况需要根据实际数据调整好G值,达到最优效果
Reddit的排名算法