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

转载 2012年03月30日 21:36:17

作者: 阮一峰

日期: 2012年3月11日

上一篇文章,我介绍了Reddit的排名算法。

它的特点是,用户可以投赞成票,也可以投反对票。也就是说,除了时间因素以外,只要考虑两个变量就够了。

但是,还有一些特定用途的网站,必须考虑更多的因素。世界排名第一的程序员问答社区Stack Overflow,就是这样一个网站。

你在上面提出各种关于编程的问题,等待别人回答。访问者可以对你的问题进行投票(赞成票或反对票),表示这个问题是不是有价值。

一旦有人回答了你的问题,其他人也可以对这个回答投票(赞成票或反对票)。

排名算法的作用是,找出某段时间内的热点问题,即哪些问题最被关注、得到了最多的讨论。

在Stack Overflow的页面上,每个问题前面有三个数字,分别表示问题的得分、回答的数目和该问题的浏览次数。以这些变量为基础,就可以设计算法了。

创始人之一的Jeff Atwood,曾经在几年前,公布过排名得分的计算公式。

写成php代码,就是下面这样:

各个算法变量的含义如下:

(1)Qviews(问题的浏览次数)

  

某个问题的浏览次数越多,就代表越受关注,得分也就越高。这里使用了以10为底的对数,用意是当访问量越来越大,它对得分的影响将不断变小。

(2)Qscore(问题得分)和Qanswers(回答的数量)

  

首先,Qscore(问题得分)= 赞成票-反对票。如果某个问题越受到好评,排名自然应该越靠前。

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

(3)Ascores(回答得分)

  

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

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

(4)Qage(距离问题发表的时间)和Qupdated(距离最后一个回答的时间)

  

改写一下,可以看得更清楚:

  

Qage和Qupdated的单位都是秒。如果一个问题的存在时间越久,或者距离上一次回答的时间越久,Qage和Qupdated的值就相应增大。

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

(5)总结

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

(完)

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

上一篇文章,我介绍了Reddit的排名算法。 它的特点是,用户可以投赞成票,也可以投反对票。也就是说,除了时间因素以外,只要考虑两个变量就够了。 但是,还有一些特定用途的网站,必须考虑更多的因素。...
  • twlkyao
  • twlkyao
  • 2014年02月24日 18:36
  • 1098

内容社区如何做文章排序及StackOverflow问答排名算法

对于一个以内容为主的社区,围绕各种话题,每天都会产生大量文章,很多文章会不断被浏览、评论、转发或者点赞,逐渐由一篇平淡文章变为热门文章。那么这些文章如何精准的呈现给用户呢,如果总是呈现在首页,那么新发...
  • u013085897
  • u013085897
  • 2017年04月23日 12:19
  • 1191

Kaggle中常用融合技术

Kaggle中常用融合技术: 原文链接:http://mlwave.com/kaggle-ensembling-guide/ 模型融合技术可以提高一系列机器学习任务的准确率。在这篇文章中我将会...
  • a353833082
  • a353833082
  • 2016年02月29日 20:46
  • 3801

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

Reddit 排名算法的特点是,用户可以投赞成票,也可以投反对票。也就是说,除了时间因素以外,只要考虑两个变量就够了。 但是,还有一些特定用途的网站,必须考虑更多的因素。世界排名第一的程序员问答社区...
  • zhuhengv
  • zhuhengv
  • 2016年01月07日 14:07
  • 571

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

作者: 阮一峰 日期: 2012年3月11日 上一篇文章,我介绍了Reddit的排名算法。 它的特点是,用户可以投赞成票,也可以投反对票。也就是说,除了时间因素以外,只要考虑...
  • Viidiot
  • Viidiot
  • 2013年09月19日 17:34
  • 852

向Stack Overflow上排名第一的大神Jon Skeet提问!

Jon Skeet 谷歌软件工程师,微软资深C# MVP,拥有10余年C#项目开发经验。自2002年来,他一直是C#社区、新闻组、国际会议的活跃技术专家和Stack Overflow总排名第一的用户,...
  • qq_29134495
  • qq_29134495
  • 2016年05月19日 10:02
  • 793

Stack Overflow Developer Survey 2016 Results 翻译

  • 2016年12月22日 23:35
  • 1.33MB
  • 下载

stack overflow 问题

  • 2013年11月20日 10:34
  • 26.35MB
  • 下载

Stack Overflow architecture qcon china

  • 2014年08月06日 18:24
  • 3.4MB
  • 下载

stack overflow

  • 2008年06月25日 13:20
  • 2.86MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:基于用户投票的排名算法(三):Stack Overflow
举报原因:
原因补充:

(最多只允许输入30个字)