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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Hacker News与Reddit的算法比较

發(fā)布時(shí)間:2025/3/13 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hacker News与Reddit的算法比较 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

Hacker News與Reddit的算法比較

鄭昀 20101213

Hacker News是Y Combinator旗下的一個(gè)新聞?lì)l道,屬于digg類(lèi)產(chǎn)品,

SEOmoz曾經(jīng)在2008年7月隆重推出Reddit、Stumbleupon、Del.icio.us和Hacker News算法全揭秘。由此,這些知名Web2.0網(wǎng)站的算法浮出水面。谷文棟曾在2009年時(shí)如下講述了Hacker News的Ranking算法:

(p – 1) / (t + 2)^1.5

其中,
1)p 表示文章得到的投票數(shù),之所以要使用 (p – 1),應(yīng)該是想去掉文章提交者的那一票。
2)(t + 2)^1.5, 這個(gè)是時(shí)間因子。t 表示當(dāng)前時(shí)間與文章提交時(shí)間間隔的小時(shí)數(shù)。但為什么要加 2 之后再取 1.5 的冪,似乎就沒(méi)什么道理可言了,也許是個(gè) trial-and-error 的結(jié)果吧。

他對(duì)“1.5”這個(gè)參數(shù)也沒(méi)有做出解釋。

Amir Salihefendic(他是Plurk、Todoist的Co-Founder)在今年10月份撰文《How Hacker News ranking algorithm works 》完整地解釋了Hacker News的Ranking算法,從中我們才得以知道那個(gè)神秘的“1.5”是什么。稍后我們還會(huì)拿這個(gè)排序規(guī)則與Reddit的排序規(guī)則做對(duì)比。

?

一、Hacker News的ranking算法

Hacker News是用Arc編寫(xiě)的(Arc是Lisp的一個(gè)“方言”)開(kāi)源項(xiàng)目,源代碼可以從 http://ycombinator.com/arc/arc3.tar 獲取。Ranking算法就寫(xiě)在這個(gè)包的news.arc文件里。鑒于這種語(yǔ)言是未來(lái)的語(yǔ)言,不容易看懂,所以代碼就不貼了,光把注釋貼出來(lái):

; Ranking

; Votes divided by the age in hours to the gravityth power.
; Would be interesting to scale gravity in a slider.

努力領(lǐng)會(huì)這段神諭的同時(shí),Amir說(shuō)其實(shí)本質(zhì)上執(zhí)行的ranking規(guī)則是:

Score = (P-1) / (T+2)^G

where,
P = points of an item (and -1 is to negate submitters vote)
T = time since submission (in hours)
G = Gravity, defaults to 1.8 in news.arc

也就是說(shuō),前文所謂的莫名其妙的“1.5”,其實(shí)就是“Gravity(萬(wàn)有引力)”參數(shù),默認(rèn)是1.8。p之所以減去1,就是要去掉文章提交者的那一票。

1.1.Gravity(G)和Time(T)的作用

Gravity和time對(duì)于一篇文章(即一個(gè)item)的得分有著重要影響。一般來(lái)說(shuō):

  • 隨著T的增加(即時(shí)間的流逝),得分將下降,意味著更早被提交進(jìn)來(lái)的文章將會(huì)得到越來(lái)越低的分?jǐn)?shù);
  • 對(duì)于更早的文章,如果gravity增加,得分將會(huì)下降得更快。

(在這里要說(shuō)明一下,著名的搜索引擎網(wǎng)站wolframalpha的plot語(yǔ)法能幫你根據(jù)公式(代入?yún)?shù))畫(huà)圖,方便編纂文檔隨時(shí)舉例或者調(diào)整算法,超贊。)

·得分是如何取決于time的

Amir利用wolframalpha繪制了公式代入?yún)?shù)后的趨勢(shì)變化圖,如下所示(下圖訪問(wèn)鏈接http://goo.gl/ddYe):

How score is behaving over time

上圖中,定參Gravity為默認(rèn)值1.8,隨著時(shí)間的流逝,文章得分都會(huì)迅速下降。你還能看出來(lái),24小時(shí)后(即t=24時(shí))無(wú)論你的文章得到多少投票,它依然會(huì)得到一個(gè)非常低的得分。

·得分是如何取決于gravity的

當(dāng)固定投票數(shù),改變gravity又會(huì)如何呢?(下圖訪問(wèn)鏈接http://is.gd/iJSbT):

?

How gravity parameter behaves

可以看到gravity越大,得分下降趨勢(shì)就越快。

·Ranking規(guī)則的Python實(shí)現(xiàn)

這個(gè)得分函數(shù)就是這么簡(jiǎn)單:

def calculate_score(votes, item_hour_age, gravity=1.8):
return (votes - 1) / pow((item_hour_age+2), gravity)

Amir最后說(shuō)道:“最關(guān)鍵的是你要理解這個(gè)算法如何起作用,以及你如何為自己的應(yīng)用定制這個(gè)算法。”

?

相對(duì)于下面要講述的Reddit排序算法,Hacker News的Ranking算法主要區(qū)別在于引入了time since submission這個(gè)參數(shù),這個(gè)參數(shù)是不斷變化的,從而導(dǎo)致一篇文章的得分不斷變化。而Reddit下的一篇文章得分(Rank)是不變的,越新的文章得分越高,所以排序自然可能排在最前面。

?

二、Reddit的ranking算法

Reddit 是Digg類(lèi)型網(wǎng)站,曾經(jīng)在Digg 4改版引發(fā)用戶(hù)眾怒時(shí)被用戶(hù)刻意追捧,獨(dú)立訪問(wèn)數(shù)暴漲50%,并刻意將reddit鏈接分享至digg,使得digg主頁(yè)充斥著對(duì)手reddit的鏈接。

谷文棟也曾于2008年12月發(fā)表過(guò)《Social Media Algorithm: Reddit》詳細(xì)地解釋了Reddit的公式及其參數(shù)構(gòu)成。2010年11月,Amir也對(duì)此作了圖文并茂的闡述:《How Reddit ranking algorithms work》。

它的公式如SEOmoz所描述的:

reddit formula

具體參數(shù)定義我就不再贅述了,可參考谷文棟或SEOmoz的文章。

Reddit也是開(kāi)源的,其Python代碼可從 http://code.reddit.com/ 尋到。他們的排序算法則因?yàn)樾阅軉?wèn)題改由Pyrex實(shí)現(xiàn)(Pyrex 是一種專(zhuān)門(mén)設(shè)計(jì)用來(lái)編寫(xiě) Python 擴(kuò)展模塊的語(yǔ)言。根據(jù) Pyrex Web 站點(diǎn)的介紹,“它被設(shè)計(jì)用來(lái)在友好易用的高級(jí) Python 世界和凌亂的低級(jí) C 世界之間搭建一個(gè)橋梁。”據(jù)說(shuō),“使用 Python like 的語(yǔ)法來(lái)編寫(xiě) Python 的 C Module ,自動(dòng)翻譯成C語(yǔ)言代碼,進(jìn)而編譯獲取C代碼的高效率。而且配合 Python 的 Distutils ,使得構(gòu)建過(guò)程簡(jiǎn)單到了只需要 setup.py 的程度”)。

你可以點(diǎn)擊鏈接 http://code.reddit.com/browser/r2/r2/lib/db/sorts.py?rev=4778b17e939e119417cc5ec25b82c4e9a65621b2 查看這個(gè)“hot ranking”算法被翻譯為Python后的代碼。

reddit很強(qiáng)調(diào)submission time(文章提交時(shí)間)。

2.1.提交時(shí)間的作用

提交時(shí)間對(duì)于文章評(píng)級(jí)有如下作用:

  • 提交時(shí)間對(duì)ranking有很大影響,新文章肯定比老文章rank值高;
  • 這個(gè)得分將不會(huì)隨著時(shí)間流逝而遞減,但新文章會(huì)得到更高的得分。這與Hacker News的算法有著顯著區(qū)別。

下圖顯示了,固定Up和Down投票數(shù)的情況下,不同的提交時(shí)間,rank分值的變化:

從上圖可以看出,同樣的,隨著時(shí)間的推移,新文章的得分會(huì)逐漸超越高同樣投票數(shù)的老文章。

2.2.log函數(shù)的作用

這個(gè)“hot ranking”算法用了logarithm函數(shù)來(lái)確保最前面的投票權(quán)重大于接下來(lái)的投票。它的彎彎繞說(shuō)法是這樣的:

The first 10 upvotes have the same weight as the next 100 upvotes which have the same weight as the next 1000 etc...

谷文棟是這么解釋的:

前 10 票獲得的權(quán)重,與 11 到 101 票所獲得的權(quán)重是一樣的。

圖形化的闡釋是:

?

如果不用logarithm函數(shù),那么情況就會(huì)是這樣:

還是圖解看上去直觀吧?

2.3.反對(duì)票的作用

Reddit是少數(shù)幾個(gè)允許有反對(duì)票的Digg類(lèi)型新聞聚合網(wǎng)站,Hacker News就沒(méi)有投反對(duì)票一說(shuō)。

它的公式中有這么一個(gè)因子:

up_votes - down_votes

它的作用可以圖形化為:

也就是說(shuō),那些有爭(zhēng)議性話(huà)題的文章,得分將會(huì)比只得到贊同票的文章更低。

2.4.總結(jié)

Amir總結(jié)了一下Reddit的算法:

  • Submission time(提交時(shí)間)是一個(gè)非常重要的參數(shù),玩聚SR和RT就都是參照Reddit重視文章或熱門(mén)消息的發(fā)布時(shí)間的。
  • 前10票的得分,和接下來(lái)的100票,是一樣的。這樣,得了10票的文章,就可能和得了50票的文章得分相似。
  • 爭(zhēng)議性話(huà)題(得了很多反對(duì)票的)得分會(huì)很低。

(Amir還講了Reddit的comment ranking,有興趣可以自己去看看)

?

三、小結(jié)

就我在玩聚SR上使用Reddit排序算法的經(jīng)驗(yàn):

Hacker News的算法能夠讓老文章消失得更快,比如24小時(shí)之前的文章,基本就不會(huì)在榜單上存留。

Reddit的算法則能夠讓眾望所歸的那些優(yōu)秀文章能夠停留相當(dāng)長(zhǎng)時(shí)間,然后隨著時(shí)間流逝,一點(diǎn)一點(diǎn)地被新的、好的文章擠下去。

Reddit的算法還有一個(gè)好處就是,當(dāng)投票數(shù)變化了,才需要去重新計(jì)算一次文章的Rank,不用管時(shí)間的流逝。

?

參考資源:

1、Amir 2010年 《How Hacker News ranking algorithm works》;

2、谷文棟 2009年 《Social Media Algorithm: Hacker News》;

3、谷文棟 2008年 《Social Media Algorithm: Reddit》;

4、SEOmoz 2008年 《Reddit, Stumbleupon, Del.icio.us and Hacker News Algorithms Exposed!》。

轉(zhuǎn)載于:https://www.cnblogs.com/zhengyun_ustc/archive/2010/12/15/amir.html

總結(jié)

以上是生活随笔為你收集整理的Hacker News与Reddit的算法比较的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。