Web排行榜相关排序算法总结


资讯、成就值排序算法

1、通用的排序算法

(1)单位时间的交互数(每小时更新一次)

(2)总交互数

(3)评论数加权

(4)按时间排序

设计带权score函数,涉及:交互数、点赞数、点踩数、评论数、浏览数、时间点赞很容易 权值应该小,写评论往往不多 权值应该稍大(比如微博点赞很多 发博人稍少 写博客的更少 所以权值不能相同)

实现算法:找出参与排序的元素,利用Redis里面的sortedset(有序队列利用jedis.zaddjedis.zrange等方法就可以选出排名前多少的对象。

排序线程定时触发计算score分数(优化计算score分数 重新排序,优化的话不用计算所有实例的分数,可以计算近3天的,也可以计算上次排序到这次排序之间发生变化的实例)

 

2、经典开源排序算法

(1)Hacker News

http://news.ycombinator.com (科技新闻的资讯网站)

排序算法:

Score=p-1/t+2G

P:投票数(点赞数),-1是先把自己投的赞给过滤掉

T:发布资讯到现在的时间间隔(小时),+2防止除数太小。

G:重力加速度,指数增大时间参数的影响,时间越久score越低(G=2 时间T23那么分母就从1625,指数增长很快)

从业务角度Hacker News是科技新闻资讯网站,偏实时性,分母时间是个指数形式,默认g=1.8,那么过15个小时左右 score就会大幅度降下来。

Web排行榜相关排序算法总结

(2)Reddis

http://www.reddis.com Alexa排名全世界22网站流量大,新闻资讯网站,资讯可赞可踩,

计算过程

T=A-B  A发帖时间  B网站成立时间)

X=U-D  U点赞数  D踩的数)

X>0 y=1;x<0 y=-1 x=0y=0;

Z=|x|

F(t,y,z)=log10(z) + (yt)/45000 

因为流量数很大z很大 所以用log将其收敛,一天的时间权重86400/45000=1.92,而10^1.92=83,也就是说赞踩差要涨到83倍才可以与一天前分数相同。透露这样一种思想,前10个点赞很有效,但是从1001000个可能是跟风点赞导致,并没有前十个那么有依据。时间最重要的流量比较大,所以高赞文章有优势,适合新闻类排序。

(3)StackOverflow

http://stackoverflow.com

 Web排行榜相关排序算法总结

浏览数容易上涨,通过log将其平滑下来,

(4)IMDB 电影打分

http://www.imdb.com/chart/top

加权排名WR=v/v+m))*r   +  (m/ (v+m))*c

R=电影投票的平均分

V=有效投票人数

M=最低投票人数,1250

C=所有电影的平均值

 

投票人越多,偏向于用户打分值,防止冷门电影小数人高分导致的高分,v是有效投票人数可以防止水军刷票(比如 某批人只给一个电影打过分)