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

简介:

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

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

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

bg2012031101.jpg

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

bg2012031102.png

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

bg2012031103.png

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

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

bg2012031104.png

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


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

bg2012031105.png

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

(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)成反比。

(完)

目录
相关文章
|
11月前
|
存储 安全 算法
从“Back to Basic”到伙伴优先,阿里云的组合拳总算整明白了
阿里巴巴最近又活跃了起来——不是在天猫,也不是在支付宝,而是在技术端。 5月26日,阿里云发布了2022财年财报,营收首次超过千亿达到1001.8亿元,同时首次实现年度盈利(11.46亿元); 6月13日,阿里云智能总裁张建锋在2022年阿里云峰会上发布年度策略“Back to Basic”,发布了云数据中心专用处理器CIPU,提出要在技术长征路上不懈努力赢取新的突破;
247 0
|
Java 程序员 编译器
Stack Overflow上59万浏览量的提问:为什么会发生ArrayIndexOutOfBoundsException?
Stack Overflow上59万浏览量的提问:为什么会发生ArrayIndexOutOfBoundsException?
|
SQL 存储 开发框架
架构设计91-闲聊02-帮Stack Overflow评估一下性能指标
架构设计91-闲聊02-帮Stack Overflow评估一下性能指标
131 0
架构设计91-闲聊02-帮Stack Overflow评估一下性能指标
|
存储 人工智能 自然语言处理
实测 ChatGPT 编程效果被其发现,这波我先站队 Stack Overflow
本文对 ChatGPT 解答编程问题的情况进行了测试。测试了不同难度的问题,并对 ChatGPT 的回答结果进行了鉴别。测试结果表明,ChatGPT 在解答简单的编程问题时表现较为出色,但在解决复杂的问题时则不太理想。因此,也总结出了如何更好地向 ChatGPT 提问的方法,但是并不建议没有编程经验的人直接使用 ChatGPT 来解决编程问题。
1532 0
实测 ChatGPT 编程效果被其发现,这波我先站队 Stack Overflow
|
缓存 JavaScript 前端开发
深究 :visited 和隐私安全那点事
好久前码代码时,想将网页上已阅读的链接做些特殊的样式处理,然而发现很多事情做不了,当时做了下笔记,这里整理下。
深究 :visited 和隐私安全那点事
|
Java API Apache
Stack Overflow 最火的一段代码竟然有 Bug...
于是,我看到了下面这个问题:怎样将字节数输出成人类可读的格式?也就是说,怎样将123,456,789字节输出成123.5MB?
Stack Overflow 最火的一段代码竟然有 Bug...
|
SQL JavaScript 前端开发
2013年 Stack Overflow 用户调查结果
截止2013年,Stack Overflow社区的月访问量从2150万次增长到了2690万次,访问者分别来自全球的242个国家。为了维持社区的增长,我们做了很多的努力——Careers 2.0已经有了法语和德语两个本地化版本,我们正致力于为整个Stack Overflow网络开发iOS和Android应用,并且Stack Overflow历史上的首次本地化尝试——葡萄牙语版Stack Overflow——已经处于Beta状态。为了让我们更好地为Stack Overflow社区和用户服务,我们每年都会进行一项调查以了解用户心中的期望,用户对网站的使用反馈以及用户心中的其他想法。2013年,我们分
173 0
|
前端开发
前端进阶|第十三天 opacity: 0,visibility: hidden,display: none看不见元素看得见的属性
前端进阶|第十三天 opacity: 0,visibility: hidden,display: none看不见元素看得见的属性,每天一个知识点。
2630 0
|
JSON 前端开发 API
剥开比原看代码16:比原是如何通过/list-transactions显示交易信息的
作者:freewind 比原项目仓库: Github地址:https://github.com/Bytom/bytom Gitee地址:https://gitee.com/BytomBlockchain/bytom 在前一篇文章中,我们试图理解比原是如何交易的,但是由于内容太多,我们把它分成了几个小问题,并在前一篇解决了“在dashboard中如何提交交易信息”,以及“比原后台是如何操作的”。
1177 0
|
程序员
Stack Overflow 那些让人头大的规矩
stack overflow 今年 stackoverflow.com 已经上线十年,Stack Overflow 可以说是最好的软件类问答网站了,给软件开发人员工作和学习提供了非常大的便利,以至于像我这样的小白,离了 Stack Overflow 简直都不会写程序了。
1272 0