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

上一篇文章,我介绍了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)成反比。

(完)

原文发布于微信公众号 - php(phpdaily)

原文发表时间:2016-04-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序人生 阅读快乐

《算法心得 高效算法的奥秘 原书第2版》

由在IBM工作50余年的资深计算机专家撰写,Amazon全五星评价,算法领域最有影响力的著作之一

411
来自专栏大数据文摘

平均数的称霸之路

1708
来自专栏挖数

论程序员怎么拥有咪蒙的文笔

作为半个程序员的我,是怎么训练我的文笔的呢?今天,我就跟陈独秀一起,分享一些提升文笔的小技巧

984
来自专栏大数据文摘

奇怪的数字0.577不断出现在我们身边

1172
来自专栏吉浦迅科技

用超级计算机来验证双幻原子核(double magic nuclei)

美国橡树岭(Oak Ridge National Laboratory)的物理学家用超级计算机确认了镍78是个双幻原子核(double magic nuclei...

3099
来自专栏C语言及其他语言

【图书】嗨翻C语言

内容介绍: 你能从这本书中学到什么? 你有没有想过可以轻松学习C语言?《嗨翻C语言》将会带给你一次这样的全新学习 体验。本书贯以有趣的故事情节、生动形象的图片...

2695
来自专栏张善友的专栏

常用翻译技巧

英汉两种语言在句法、词汇、修辞等方面均存在着很大的差异,因此在进行英汉互译时必然会遇到很多困难,需要有一定的翻译技巧作指导。常用的翻译技巧有增译法、省译法、转换...

1849
来自专栏大数据文摘

数学救命:决斗中的概率问题!

2725
来自专栏数据结构与算法

网络流简介

本系列文章只讨论网络流在信息学奥赛中的应用 前言 网络流在信息学奥赛中是一个非常庞大的体系,因为该知识点的模型多变,建模方式复杂,对选手的能力要求较高,因此在各...

2685
来自专栏tkokof 的技术,小趣及杂念

也说棋类游戏

之前自己编写过一点关于棋类游戏的代码,所以对于这类游戏的大致构成也算是有一些肤浅的认识,前一阵子突然想到应该将这些个零散知识好好总结一番,以算作为自己学习的一...

762

扫码关注云+社区