基于用户投票的排名算法(二)Reddit2014-10-20 阮一峰 上一次,我介绍了Hacker News的排名算法。它的特点是用户只能投赞成票,但是很多网站还允许用户投反对票。就是说,除了好评以外,你还可以给某篇文章差评。

Reddit是美国最大的网上社区,它的每个帖子前面都有向上和向下的箭头,分别表示"赞成"和"反对"。用户点击进行投票,Reddit根据投票结果,计算出最新的"热点文章排行榜"。怎样才能将赞成票和反对票结合起来,计算出一段时间内最受欢迎的文章呢?如果文章A有100张赞成票、5张反对票,文章B有1000张赞成票、950张反对票,谁应该排在前面呢?Reddit的程序是开源的,使用Python语言编写。排名算法的代码大致如下:

这段代码考虑了这样几个因素:(1)帖子的新旧程度tt = 发贴时间 - 2005年12月8日7:46:43t的单位为秒,用unix时间戳计算。不难看出,一旦帖子发表,t就是固定值,不会随时间改变,而且帖子越新,t值越大。至于2005年12月8日,应该是Reddit成立的时间。(2)赞成票与反对票的差xx = 赞成票 - 反对票URL:http://www.bianceng.cn/Programming/sjjg/201410/46036.htm