日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/7/25 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 基于用户投票的排名算法(三):Stack Overflow 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作者:?阮一峰

日期:?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)成反比。

(完)

文檔信息

  • 版權聲明:自由轉載-非商用-非衍生-保持署名(創意共享3.0許可證)
  • 發表日期:?2012年3月11日
  • 更多內容:?檔案???算法與數學
  • 購買文集:?《如何變得有思想》
  • 社交媒體:?twitter,?weibo
  • Feed訂閱:?

相關文章

  • 2015.09.01:?理解矩陣乘法 大多數人在高中,或者大學低年級,都上過一門課《線性代數》。這門課其實是教矩陣。
  • 2015.07.27:?蒙特卡羅方法入門 本文通過五個例子,介紹蒙特卡羅方法(Monte Carlo Method)。
  • 2015.06.10:?泊松分布和指數分布:10分鐘教程 大學時,我一直覺得統計學很難,還差點掛科。
  • 2013.12.16:?樸素貝葉斯分類器的應用 生活中很多場合需要用到分類,比如新聞分類、病人分類等等。




留言(18條)

呵呵,繼續來學習,第一次沙發!

2012年3月11日 15:56?|?∞?|?引用

阮兄的博客現在經常訪問不了了啊,呵呵

2012年3月11日 20:17?|?∞?|?引用

這個太復雜了,對于大型社區還行,一般的站點基本上不起作用,還容易被人刷票

2012年3月11日 22:51?|?∞?|?引用

stackoverflow是系統自動找出最佳回答?一看就知道沒用過SF,紙上談兵。

2012年3月12日 09:27?|?∞?|?引用

引用自由國度的發言:

stackoverflow是系統自動找出最佳回答?一看就知道沒用過SF,紙上談兵。

作者說的是“根據投票結果”,stackoverflow自動找出最佳回答,這沒有問題啊。

2012年3月13日 11:11?|?∞?|?引用

引用:“但是我感覺,簡單加總的設計還不夠全面。這里有兩個問題。首先,一個正確的回答勝過一百個無用的回答,但是,簡單加總會導致,1個得分為100的回答與100個得分為1的回答,總得分相同。其次,由于得分會出現負值,因此那些特別差的回答,會拉低正確回答的得分。”
————————————————
我倒覺得它的算法是對的,
因為對于目的為“找到熱點問題”的排名算法來說,
“討論參與度”的權重大于“答案正確度”。
試想有一個爭論極為激烈、參與者眾多,但雙方觀點爭鋒相對、陣營勢均力敵的話題,
如果在sum(Ascores)這一項里引入了負值抵扣的話,就會變得和平淡的對立話題無法區分了;
而如果引入了針對高分回答的加權,則排名的性質其實變成了受歡迎的最佳答案,而非熱點問題排名。

2012年3月13日 12:07?|?∞?|?引用

有人研究過豆瓣評論的算法嗎,除了有用、沒用、時間這些變量之外,貌似還有其他的因素

2012年3月13日 14:46?|?∞?|?引用

最近博客的頻率好小啊,博主加油啊。。。。。。

2012年3月13日 17:42?|?∞?|?引用

"一旦有人回答了你的問題,其他人也可以對這個回答投票(贊成票或反對票)。根據投票結果,系統自動找出最佳回答。"

---
不是自動找出最佳回答的,由提問人來選的。


2012年3月14日 17:40?|?∞?|?引用

引用lusernews的發言:

不是自動找出最佳回答的,由提問人來選的。

不好意思,我沒在SO上面提問過……

文章已經改過來了。

2012年3月16日 01:56?|?∞?|?引用

引用小兵的發言:

這個太復雜了,對于大型社區還行,一般的站點基本上不起作用,還容易被人刷票

看策略和管理了。so 的門檻不低,想刷票太難了,需要一定的積分才能投票,而且每天能投的票數很有限。而積分只有認真參與才能得到。

2012年3月16日 11:39?|?∞?|?引用

嗯,很好很有用~~值得我參考來設計互聯網咨詢價值算法的設計。

2012年3月31日 21:53?|?∞?|?引用

引用sicifus的發言:

對于目的為“找到熱點問題”的排名算法來說,

“討論參與度”的權重大于“答案正確度”。

試想有一個爭論極為激烈、參與者眾多,但雙方觀點爭鋒相對、陣營勢均力敵的話題,如果在sum(Ascores)這一項里引入了負值抵扣的話,就會變得和平淡的對立話題無法區分了;而如果引入了針對高分回答的加權,則排名的性質其實變成了受歡迎的最佳答案,而非熱點問題排名。

這個還是得看問題展現的應用場景。如果問題的展示是希望得到更多的人參與回答,那么不需要特別針對高分回答進行加權;相反,如果問題的展示是希望給更多的人提供幫助,則需要針對高分問答進行加權。類似于 已解決問題 和 待解決問題。

2012年4月11日 14:38?|?∞?|?引用

公式中的4、5、2三個系數是怎么確定的?

2012年4月17日 11:37?|?∞?|?引用

引用指針的發言:

公式中的4、5、2三個系數是怎么確定的?

同問,系數是如何確定的,有沒有什么方法?

2012年5月28日 10:53?|?∞?|?引用

博主,看了php代碼,Qage和Qupdated的單位不是秒,應該是小時,如果是秒的話,分母就太大了。

2013年8月25日 17:40?|?∞?|?引用

希望博主對各大推薦算法的優缺點進行對比,讓讀者更清晰。

2014年5月30日 16:47?|?∞?|?引用

引用world_wind的發言:

博主,看了php代碼,Qage和Qupdated的單位不是秒,應該是小時,如果是秒的話,分母就太大了。

確實是 小時 ,/3600 .....我正納悶呢。。。

2014年9月10日 15:39?|?∞?|?引用


總結

以上是生活随笔為你收集整理的基于用户投票的排名算法(三):Stack Overflow的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。