天天看點

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

它的特點是,使用者可以投贊成票,也可以投反對票。也就是說,除了時間因素以外,隻要考慮兩個變量就夠了。

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

你在上面提出各種關于程式設計的問題,等待别人回答。通路者可以對你的問題進行投票(贊成票或反對票),表示這個問題是不是有價值。

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

一旦有人回答了你的問題,其他人也可以對這個回答投票(贊成票或反對票)。

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

排名算法的作用是,找出某段時間内的熱點問題,即哪些問題最被關注、得到了最多的讨論。

在stack overflow的頁面上,每個問題前面有三個數字,分别表示問題的得分、回答的數目和該問題的浏覽次數。以這些變量為基礎,就可以設計算法了。

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

各個算法變量的含義如下:

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

(完)