实现一个内容系统的问答排名,了解一下几个经典的算法
hacker news上面的热度排名多年以来能够很好的反映绝大多数用户的喜好,热度比较高的的文章也不会一直出现在前列,从而导致没有新的内容被关注,
他们会按照文章的票数多少和发布时间对文章进行一些逻辑处理得到对应的热度排序。
Score=(P−1)(T+2)G S c o r e = ( P − 1 ) ( T + 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值,达到最优效果
∫(ts,y,z)=log10z+yts4500 ∫ ( t s , y , z ) = log 10 z + y t s 4500
y : x>0 取 1 , x<0 取 -1 ,x=0 取 0
举例:
86400/45000=1.92 一天权重调整则为1.92
10^1.92 =83 投票差要涨83倍
赞成票加分,投票差前10和接下来的100等权
从上图可以看的出来时间是最重要的权重,由于流量比较大,所以对于高赞文章有所优势,适合新闻类排序
(logQviews∗4)+Qanswers∗Qscore5+sum(Ascores)(QageInHours+1)−(QageInHours−Qupdated2)1.5 ( log Q v i e w s ∗ 4 ) + Q a n s w e r s ∗ Q s c o r e 5 + s u m ( A s c o r e s ) ( Q a g e I n H o u r s + 1 ) − ( Q a g e I n H o u r s − Q u p d a t e d 2 ) 1.5
(WR)=vv+m∗R+mv+m∗C ( W R ) = v v + m ∗ R + m v + m ∗ C
投票人数越多,越偏向于用户打分值,防止冷门电影小数人高分导致的高分
这里我们只是大概的了解一下他们的公式具体含义,使用场景,具体实践还需要结合业务和场景来挑选。