排名算法

排名算法

基于用户投票的排名算法(一):Delicious和Hacker News

基于用户投票的排名算法(二):Reddit

基于用户投票的排名算法(三):Stack Overflow

基于用户投票的排名算法(四):牛顿冷却定律

基于用户投票的排名算法(五):威尔逊区间

基于用户投票的排名算法(六):贝叶斯平均

Hacker News

P:表示帖子的得票数,减去1是为了忽略发帖人的投票。

T:表示距离发帖的时间(单位为小时),加上2是为了防止最新的帖子导致分母过小(之所以选择2,可能是因为从原始文章出现在其他网站,到转贴至Hacker News,平均需要两个小时)。

G:表示"重力因子"(gravityth power),即将帖子排名往下拉的力量,默认值为1.8

结论:

  1. 得票越多,排名越高。
  2. 发帖时间越新,排名越高。或者说,帖子的排名会随着时间不断下降。(经过24小时之后,所有帖子的得分基本上都小于1)
  3. 重力因子G数值大小决定了排名随时间下降的速度。G值越大,排名下降得越快。

缺点:用户只能投赞成票,不允许用户投反对票

Reddit

t:帖子的新旧程度,t = 发贴时间 - 2005年12月8日7:46:43,单位为秒,用unix时间戳计算。

x:赞成票与反对票的差,x = 赞成票 - 反对票

y:投票方向,y是一个符号变量,表示对文章的总体看法。如果赞成票居多,y就是+1;如果反对票居多,y就是-1;如果赞成票和反对票相等,y就是0。

z:帖子的受肯定(否定)的程度,z表示赞成票与反对票之间差额的绝对值。如果对某个帖子的评价,越是一边倒,z就越大。如果赞成票等于反对票,z就等于1。

总结:

  1. 赞成票与反对票的差额z越大,得分越高。
  2. 差额越大,分数越不受投票影响。
  3. 帖子越新,分数越高。分数会随时间下降

缺点:不利于赞成票和反对票都比较高,但两者非常接近的情况。假定同一时间有两个帖子发表,文章A有1张赞成票(发帖人投的)、0张反对票,文章B有1000张赞成票、1000张反对票,那么A的排名会高于B。

**Reddit的排名,基本上由发帖时间决定,超级受欢迎的文章会排在最前面,一般性受欢迎的文章、有争议的文章都不会很靠前。**这决定了Reddit是一个符合大众口味的社区,不是一个很激进、可以展示少数派想法的地方。

Stack Overflow

排名算法_第1张图片

Qviews:问题的浏览次数

问题的浏览次数越多,就代表越受关注,得分也就越高。取对数的用意是当访问量越来越大,它对得分的影响将不断变小。

Qscore:问题得分

Qscore = 赞成票 - 反对票

Qanswers:回答的数量

回答的数量代表有多少人参与这个问题。这个值越大,得分将成倍放大。这里需要注意的是,如果无人回答,Qscore再高也没用,意味着再好的问题,也必须有人回答,否则进不了热点问题排行榜。

Ascores:回答得分

"回答"比"问题"更有意义。这一项的得分越高,就代表回答的质量越高。

简单加总的设计还不够全面。首先,一个正确的回答胜过一百个无用的回答,简单加总会导致,1个得分为100的回答与100个得分为1的回答,总得分相同。其次,由于得分会出现负值,因此那些特别差的回答,会拉低正确回答的得分。

Qage:距离问题发表的时间

随着时间流逝,这个值都会越变越大,导致分母增大,因此总得分会越来越小。

Qupdated:距离最后一个回答的时间

随着时间流逝,这个值都会越变越大,导致分母增大,因此总得分会越来越小。

总结

Stack Overflow热点问题的排名,与参与度(Qviews和Qanswers)和质量(Qscore和Ascores)成正比,与时间(Qage和Qupdated)成反比。

你可能感兴趣的:(算法)