在本文中,我想向您介绍HackerNews网站的文章排名算法是如何工作的,以及如何在您自己的应用程序中使用该算法。这个算法非常简单,但它在突出热门文章和选择新文章方面做得非常出色。深入研究news.arc代码HackerNews是用Arc语言编写的,这是一种由YCombinator投资公司创始人保罗格雷厄姆创建的Lisp方言。HackerNews是开源的,您可以在arclanguage.org找到它的源代码。深入挖掘news.arc程序,您会发现这个排名算法代码,如下所示:;Votesdividedbytheageinhourstothegravitythpower。;在滑块中缩放重力会很有趣。)(defrontpage-rank(s(oscorefnrealscore)(ogravitygravity*))(*(/(letbase(-(scorefns)1)(if(>base0)(exptbase.8)base))(expt(/(+(item-ages)timebase*)60)gravity))(if(no(ins!type'story'poll))1(blanks!url)nourl-factor*(lightweights)(minlightweight-factor*(contro-factors))(contro-factors))))这个HackerNews采用的排名算法的工作原理本质上是这样的:Score=(P-1)/(T+2)^G其中P=文章获得的票数(-1是去掉文章作者的投票)T=文章提交后的时间(小时)G=权重,news.arc中默认值为1.8可以看到,这个算法实现起来非常简单。下面,我们将看到这个算法是如何工作的。重力(G)和时间(T)对排名的影响重力和时间对文章的排名分数有重大影响。正常情况是这样的:当T增加时,文章的分值会降低,也就是说较旧的文章分值会更低。当权重增加时,较旧文章的分数会下降得更快。为了可视化这个算法,我们可以将它绘制成WolframAlpha。分数如何随时间变化你可以看到,随着时间的推移,分数突然下降,例如,24小时前的文章分数变得很低——不管它获得了多少票。绘图语句:plot((30-1)/(t+2)^1.8,(60-1)/(t+2)^1.8,(200-1)/(t+2)^1.8)wheret=0..24比例参数如何影响排名?从图中可以看出,比例越大,分数下降越快。绘图语句:plot((p-1)/(t+2)^1.8,(p-1)/(t+2)^0.5,(p-1)/(t+2)^2.0)whereet=0..24,p=10前面讲过Python语言实现,这个评分算法很容易实现:defcalculate_score(votes,item_hour_age,gravity=1.8):return(votes-1)/pow((item_hour_age+2),gravity)key这是关于了解算法中的每个因素如何影响分数,以便您可以在您的应用程序中对其进行自定义。我希望这篇文章已经向您解释了这一点。编程愉快!编辑:PaulGraham分享了修改后的HN排名算法:(=gravity*1.8timebase*120front-threshold*1nourl-factor*.4lightweight-factor*.17gag-factor*.1)(defrontpage-rank(s(oscorefnrealscore)(ogravitygravity*))(*(/(letbase(-(scorefns)1)(if(>base0)(exptbase.8)base))(expt(/(+(item-ages)timebase*)60)gravity))(if(no(ins!type'story'poll)).8(blanks!url)nourl-factor*(mem'burys!keys).001(*(contro-factors)(if(mem'gags!keys)堵嘴-factor*(lightweights)lightweight-factor*1)))))英文原文:HowHackerNewsrankingalgorithmworks翻译链接:http://www.aqee.net/how-hacker-news-ranking-algorithm-works/
