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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

基于用户投票的排名算法(一):Delicious和Hacker

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

作者:?阮一峰

日期:?2012年2月24日

互聯網的出現,意味著"信息大爆炸"。

用戶擔心的,不再是信息太少,而是信息太多。如何從大量信息之中,快速有效地找出最重要的內容,成了互聯網的一大核心問題。

各種各樣的排名算法,是目前過濾信息的主要手段之一。對信息進行排名,意味著將信息按照重要性依次排列,并且及時進行更新。排列的依據,可以基于信息本身的特征,也可以基于用戶的投票,即讓用戶決定,什么樣的信息可以排在第一位。

下面,我將整理和分析一些基于用戶投票的排名算法,打算分成六個部分連載,今天是第一篇。

一、Delicious

最直覺、最簡單的算法,莫過于按照單位時間內用戶的投票數進行排名。得票最多的項目,自然就排在第一位。

舊版的Delicious,有一個"熱門書簽排行榜",就是這樣統計出來的。

它按照"過去60分鐘內被收藏的次數"進行排名。每過60分鐘,就統計一次。

這個算法的優點是比較簡單、容易部署、內容更新相當快;缺點是,一方面,排名變化不夠平滑,前一個小時還排名靠前的內容,往往第二個小時就一落千丈,另一方面,缺乏自動淘汰舊項目的機制,某些熱門內容可能會長期占據排行榜前列。

二、Hacker News

Hacker News是一個網絡社區,可以張貼鏈接,或者討論某個主題。

每個帖子前面有一個向上的三角形,如果你覺得這個內容很好,就點擊一下,投上一票。根據得票數,系統自動統計出熱門文章排行榜。但是,并非得票最多的文章排在第一位,還要考慮時間因素,新文章應該比舊文章更容易得到好的排名。

Hacker News使用Paul Graham開發的Arc語言編寫,源碼可以從arclanguage.org下載。它的排名算法是這樣實現的:

將上面的代碼還原為數學公式:

其中,

  P表示帖子的得票數,減去1是為了忽略發帖人的投票。

  T表示距離發帖的時間(單位為小時),加上2是為了防止最新的帖子導致分母過小(之所以選擇2,可能是因為從原始文章出現在其他網站,到轉貼至Hacker News,平均需要兩個小時)。

  G表示"重力因子"(gravityth power),即將帖子排名往下拉的力量,默認值為1.8,后文會詳細討論這個值。

從這個公式來看,決定帖子排名有三個因素:

第一個因素是得票數P。

在其他條件不變的情況下,得票越多,排名越高。

從上圖可以看到,有三個同時發表的帖子,得票分別為200票、60票和30票(減1后為199、59和29),分別以黃色、紫色和藍色表示。在任一個時間點上,都是黃色曲線在最上方,藍色曲線在最下方。

如果你不想讓"高票帖子"與"低票帖子"的差距過大,可以在得票數上加一個小于1的指數,比如(P-1)^0.8。

第二個因素是距離發帖的時間T。

在其他條件不變的情況下,越是新發表的帖子,排名越高?;蛘哒f,一個帖子的排名,會隨著時間不斷下降。

從前一張圖可以看到,經過24小時之后,所有帖子的得分基本上都小于1,這意味著它們都將跌到排行榜的末尾,保證了排名前列的都將是較新的內容。

第三個因素是重力因子G。

它的數值大小決定了排名隨時間下降的速度。

從上圖可以看到,三根曲線的其他參數都一樣,G的值分別為1.5、1.8和2.0。G值越大,曲線越陡峭,排名下降得越快,意味著排行榜的更新速度越快。

知道了算法的構成,就可以調整參數的值,以適用你自己的應用程序。

[參考文獻]

  *?How Hacker News ranking algorithm works

  *?How to Build a Popularity Algorithm You can be Proud of

(完)

文檔信息

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

相關文章

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

留言(33條)

后續還會寫reddit吧

2012年2月24日 22:44?|?∞?|?引用

簡單即美
這么簡單的公式放在科研機構里似乎根本“不配”寫出論文,但是,簡單即美

2012年2月24日 23:13?|?∞?|?引用

?用chrome打開網頁,有警告提示如下。。

警告:此頁面包含危險內容!
www.ruanyifeng.com 包含 bamosa.ru 中的內容,后一個網站是已知分發惡意軟件的網站。如果您訪問該網站,您的計算機可能會中毒。
Google 發現如果您繼續操作,您的計算機上可能會安裝惡意軟件。如果您以前訪問過此網站或者您信任此網站,則此網站可能剛剛受到黑客攻擊。您不應繼續操作,建議您明天重試或者訪問其他網站。

2012年2月25日 01:27?|?∞?|?引用

支持阮老師,繼續學習!

2012年2月25日 08:04?|?∞?|?引用

arc? 怎么看怎么像lisp

2012年2月25日 10:06?|?∞?|?引用

@Gower:

我的chrome沒有出現警告提示,我檢查了一些網頁代碼,好像也沒問題。

我會繼續觀察的。

2012年2月25日 10:30?|?∞?|?引用

“Hacker News使用Paul Graham開發的Arc語言編寫,源碼可以從arclanguage.org下載?!?/p>

這句話前后主語變了,光從句式上容易誤解為Hacker News的源碼,雖然從域名可以看出應該是Arc語言的源碼。

2012年2月25日 10:53?|?∞?|?引用

難道我理解錯了,但我記得Hacker News不是開源的呀。

2012年2月25日 10:57?|?∞?|?引用

引用osirpt的發言:

arc? 怎么看怎么像lisp

arclanguage.org 網站上說了, arc是lisp的一個方言。

2012年2月25日 10:59?|?∞?|?引用

很好奇你的這些信息是從哪里來的。

2012年2月25日 11:20?|?∞?|?引用

引用Magic的發言:

很好奇你的這些信息是從哪里來的。

很早以前,國內有人討論HN還有reddit的算法,這些算法應該是這些網站自己公布的吧,純粹推測有難度。

2012年2月25日 15:05?|?∞?|?引用

@Gower:

我知道怎么回事了,圖床image.beekka.com的.htaccess文件被掛馬了。

已經清除了。

2012年2月25日 16:23?|?∞?|?引用

重力因子 是反對票嗎?

2012年2月25日 16:36?|?∞?|?引用

網站排版看著很舒服

2012年2月25日 18:28?|?∞?|?引用

這個真是不錯!既考慮了時間,又考慮了得票數!頂一!

2012年2月27日 17:34?|?∞?|?引用

學習了,美味書簽的算法我之前也考慮過,是一個簡單可行的算法;Hacker News的排名算法不知道有沒有名字,真是太好了,可以調整。以前也學習過srmeme曾經的一個網站算法,非常不錯,國內應該還是缺少這種應用,當然,在國內這種環境必須要嚴防作弊。

2012年2月28日 17:17?|?∞?|?引用

國內有沒有一個類似Hacknews的網站呢

2012年3月 1日 16:59?|?∞?|?引用

關注中~~

2012年3月 2日 15:07?|?∞?|?引用

我覺得應該做好信息的分類工作

2012年3月 4日 10:29?|?∞?|?引用

阮先生,你的文章值得一讀,期待后續,支持

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

dwadwa

2012年3月 4日 23:21?|?∞?|?引用

o(∩_∩)o 你的文章太簡練了,太美了,比那些科研論文有價值多了.
PS:能不能分享下你的學習方式和每一篇文章背后的故事。

2012年3月 4日 23:36?|?∞?|?引用

最近博主沒更新文章呢,有點小擔心~~

2012年3月 5日 18:54?|?∞?|?引用

看過您好多文章,今天這里問候一聲~

2012年3月 6日 10:55?|?∞?|?引用

引用Brooklyn的發言:


很早以前,國內有人討論HN還有reddit的算法,這些算法應該是這些網站自己公布的吧,純粹推測有難度。


以前有人在HN上問過:?http://news.ycombinator.com/item?id=1781013

不過你也可以根據上面的代碼中的comments搜索:
https://www.google.com/search?q=Votes+divided+by+the+age+in+hours+to+the+gravityth+power.&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a

會得到很多結果,比如這篇?http://amix.dk/blog/post/19574?就是阮一峰參考文獻之一

2012年3月 6日 23:02?|?∞?|?引用

請問,得票數P減1怎樣理解呢?
“P表示帖子的得票數,減去1是為了忽略發帖人的投票?!边@句話是理解成:系統規定每個新帖票數初值為1,還是假設每個發帖人都會為自己的帖子投上一票,亦或其它理解?

2012年3月16日 09:48?|?∞?|?引用

Hacker News 的算法 非常不錯啊~!

2012年3月20日 22:07?|?∞?|?引用

您的這篇文字,讓我茅塞頓開!期待更多簡潔實用的文章!

2012年9月28日 15:21?|?∞?|?引用

糾錯“一、Delicious
最直覺、最簡單的算法,莫過于按照單位時間內用戶的投票數進行排名。得票最多的項目,自然就排在第一位?!?按語境猜測,應該是“最直接”,樓主筆誤了。不是挑刺,純粹是個人強迫癥,見不得好東西有瑕疵。

2013年1月30日 10:25?|?∞?|?引用

引用Nemo的發言:

國內有沒有一個類似Hacknews的網站呢

Fenng創建了一個:http://news.dbanotes.net/

2013年2月18日 09:10?|?∞?|?引用

引用Nemo的發言:

國內有沒有一個類似Hacknews的網站呢

試試這個?http://news.icode.hk/

2013年4月29日 21:00?|?∞?|?引用

感謝阮老師的總結。

作為一個還算大型的 BBS ,我們采用了 SF 的算法進行 『本土化改良』

2013年7月22日 11:47?|?∞?|?引用

您好,看了您的文章受益匪淺,可是也產生了一個疑惑,這些算法如何在網站中具體實現,直接用SQL order 似乎不太可能,希望您能指導一下。。。。謝謝。。。

2014年9月 3日 11:18?|?∞?|?引用


總結

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

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