rank排名算法整理

1.Delicious.com 热门书签排行榜

按照"过去60分钟内被收藏的次数"进行排名
优点:简单
缺点:排名变化不够平滑,缺乏自动淘汰旧项目的机制

2. Hacker News

根据得票数,系统自动统计出热门文章排行榜,并非得票最多的文章排在第一位,还要考虑时间因素,新文章应该比旧文章更容易得到好的排名。算法实现:http://pastebin.com/ZF57qQPi,
上面的代码还原为数学公式:

Score = (P-1) / (T+2)^G

其中:

  1. P表示帖子的得票数,减去1是为了忽略发帖人的投票。
  2. T表示距离发帖的时间(单位为小时),加上2是为了防止最新的帖子导致分母过小(之所以选择2,可能是因为从原始文章出现在其他网站,到转贴至Hacker News,平均需要两个小时)。
  3. G表示"重力因子"(gravityth power),即将帖子排名往下拉的力量,默认值为1.8



 
此图中可以发现:
有三个同时发表的帖子,得票分别为200票、60票和30票(减1后为199、59和29),分别以黄色、紫色和蓝色表示。在任一个时间点上,都是黄色曲线在最上方,蓝色曲线在最下方。

此图中可以发现:
三根曲线的其他参数都一样,G的值分别为1.5、1.8和2.0。G值越大,曲线越陡峭,排名下降得越快,意味着排行榜的更新速度越快。

下面是python的实现

def calculate_score(votes, item_hour_age, gravity=1.8):
    return (votes - 1) / pow((item_hour_age+2), gravity)

猜你喜欢

转载自san-yun.iteye.com/blog/2000326
今日推荐