`
wbj0110
  • 浏览: 1598340 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论
阅读更多

Hacker News 是一家关于计算机黑客和创业公司的社会化新闻网站,由 Paul Graham 的创业孵化器 Y Combinator 创建。与其它社会化新闻网站不同的是 Hacker News 没有踩或反对一条提交新闻的选项(不过评论还是可以被有足够 Karma 的用户投反对票,或是投支持票);只可以赞或是完全不投票。简而言之,Hacker News 允许提交任何可以被理解为“任何满足人们求知欲”的新闻。

每个新闻标题前面有一个向上的三角形,如果你觉得这个内容很好,就点击一下,投上一票。根据得票数,系统自动统计出热门文章排行榜。但是,并非得票最多的文章排在第一位,还要考虑时间因素,新文章应该比旧文章更容易得到好的排名。

Hacker News 采用公式 (p – 1) / (t + 2)^1.5 做为排行依据(Hacker News使用Paul Graham开发的Arc语言编写,源码可以从arclanguage.org下载),其中P是投票数量,t是发表以来的时间,小时计。后来AMIX.DK 给出公式 Score = (P-1) / (T+2)^G 推广了上面的公式,Hacker News的公式变成了一个特例,其在G=1.5时的应用。历史上Hacker News有用G=1.8。

第一个因素是得票数P

在其他条件不变的情况下,得票越多,排名越高。从下图可以看到,有三个同时发表的帖子,得票分别为200票、60票和30票(减1后为199、59和29),分别以黄色、紫色和蓝色表示。在任一个时间点上,都是黄色曲线在最上方,蓝色曲线在最下方。

为什么是P-1?网络上的一种解释是,很多文章作者在提交的时候会给自己投上一票。其实更重要的原因是文章发布初期的投票数对排名影响非常的,仅仅是自己给自己投的一票,也占非常大的作用。

假设P不去减去1,那公式为: p / (t + 2)^1.5

如果一个作者发布完就给自己投票,那么文章的得分为1/(0+2)^1.5=0.3535 。假设另外一篇文章发布了8小时,那么需要多少的投票呢?x/(8+2)^1.5>0.3535 X>11.17~ 即一天前的帖子要有12票才能超过新提交的文章,这显然不合理。

这个具体减多少还要视网络环境而定,要是换在国内,估计P-100还不够。另外如果你不期望“高投票文章”与“低投票文章差距过大,可以在得票数上加一个小于1的指数,比如(P-1)^0.8。

第二个因素是距离发帖时间T

在其他条件不变的情况下,越是新发表的帖子,排名越高。或者说,一个帖子的排名,会随着时间不断下降。

从前一张图可以看到,经过24小时之后,所有帖子的得分基本上都小于1,这意味着它们都将跌到排行榜的末尾,保证了排名前列的都将是较新的内容。

如果,用户的第一个投票是在当前,1小时,2小时获得时,这个曲线的变化是什么呢?如下图,曲线斜率从大到小分别是当前、1小时、2小时。可以看到第一个投票的作用不断弱化,其权重不断降低。

第三个因素是重力因子G

它的数值大小决定了排名随时间下降的速度。从下图可以看到,三根曲线的其他参数都一样,G的值分别为1.5、1.8和2.0。G值越大,曲线越陡峭,排名下降得越快。

为什么G=1.5,首先,G是干嘛的。毫无疑问,G这个数字既非时间,也非评价,其实它的主要目的是控制更新频率。G的值越大,score的衰减速度越快,排行的更新越频繁。所以,确定G值需要观察系统内部投票数在时间上的分布,然后根据需要的更新频次确定G的合理取值。越火爆、用户互动越频繁的社区,为了保证排行的稳定性(不要频繁大量的刷新),G值趋向于比较低。这就是为什么Hacker News从一开始的1.8修改成1.5,过段时间可能就变成1.2了。

 

参考文章:http://amix.dk/blog/post/19574

分享到:
评论

相关推荐

    基于用户投票的排名算法.pdf

    Hacker News 的排名算法是基于用户的投票和时间因素,系统自动统计出热门文章排行榜。该算法考虑了三个因素:得票数、时间和重力因子。得票数决定了帖子的排名,时间决定了帖子的新旧程度,重力因子决定了排名随时间...

    类hackernews源码iNews.zip

    赵戈戈:iNews最初是参照Hacker News的算法来做的,后期将评论也加入了权重。因为觉得对于这种社区来说,评论是很重要的一块,评论代表着交流,有交流就证明内容的价值有可能存在,如果只有“顶”才算权重,那激烈的...

    Python-一个HackerNews命令行CLI浏览界面

    【Python-一个HackerNews命令行CLI浏览界面】 在信息技术领域,开发命令行接口(CLI)工具是一种常见的实践,尤其对于快速原型设计和自动化任务执行。这个项目名为“Haxor News”,它是一个使用Python语言编写的...

    reverse-engineering-the-hacker-news-ranking-algorithm, 历史黑客新闻数据的分析与排序算法.zip

    reverse-engineering-the-hacker-news-ranking-algorithm, 历史黑客新闻数据的分析与排序算法 反向工程黑客新闻排名算法这个知识库是文章反向工程的一个同伴,它黑客新闻排名算法。 本文探讨了如何利用历史数据来...

    从豆瓣电影评分算法说起.pdf

    5. 推荐阅读:文档提到了阮一峰博客中的系列文章,如《基于用户投票的排名算法》,这些文章涉及了不同网站使用用户投票进行排名的算法,包括Delicious、Hacker News、Reddit、StackOverflow等。这些算法的探讨,对于...

    scrat-seo-reve-hackernews:HackerNews Web应用程序功能由Scrat-Seo + reve.js提供

    Scrat-seo-reve-hackernews 是一个基于 JavaScript 开发的Web应用程序,它结合了Scrat-Serach Engine Optimization(SEO)和reve.js库来实现HackerNews网站的功能。这个项目旨在为用户提供一个类似HackerNews的交互...

    hacker-news-digest:带有摘要和缩略图的Hacker News响应界面

    该服务从文章中提取摘要和插图,供那些想充分利用的人使用,同时减少了在决定阅读哪个和跳过哪个方面时所花的时间。... 提取摘要的更好算法 按分数/评论/时间对文章进行排序 的RSS 睡个好觉!重要 执照 中文版的

    hacker-news-analysis:对Hacker News投票协议几个方面的分析

    本文将基于一个名为“hacker-news-analysis”的项目,详细分析Hacker News投票协议的几个关键方面,以揭示其背后的设计理念和运作机制。 1. **投票系统设计** Hacker News的投票系统不同于传统的点赞或评分系统,...

    HackerNews_Reader:新闻阅读器

    HackerNews_Reader是一款基于Java开发的新闻阅读应用程序,专门设计用于浏览著名的Hacker News网站上的热门和技术类新闻。Hacker News是由Y Combinator运营的一个社区,用户可以提交链接、讨论各种话题,尤其是与...

    hackernews节点

    6. **数据结构和算法**:处理HackerNews的新闻列表可能涉及到排序、查找等操作,这需要对数据结构(如数组、链表)和基本算法(如冒泡排序、二分查找)有一定理解。 7. **错误处理**:良好的错误处理是任何程序的...

    hackernews:用Rails编写的Hacker News克隆

    基于HN算法的评论和帖子流行度算法 嵌套评论,支持,业力 用户帐户创建 移动友好(基于Bootstrap) 智能网址截断 去做: 回复等级(目前,它们只是最近的第一) 更好地过滤显示和询问帖子 基于HN的代码。 查看。

    dataquest_project:分析Android和iOS移动应用。 分析网站Hacker News

    在这个"dataquest_project"中,我们将深入探讨Android和iOS移动应用的数据分析,同时利用知名的科技新闻社区Hacker News作为数据来源。这个项目的核心是利用Jupyter Notebook进行数据分析和可视化,这是一款广泛使用...

    cpp-HnGopherHackerNewsOvertheGopherProtocol

    Hacker News(简称HN)是互联网上一个热门的科技新闻分享社区,而Gopher协议则是一种古老的文件检索协议,它在互联网早期扮演了重要角色。本文将深入探讨如何使用C++语言实现一个名为cpp-HnGopher的项目,将Hacker ...

    engagement:衡量您在各种社交平台上的社交参与度

    安装将此行添加到应用程序的 Gemfile 中: gem 'engagement'然后执行: $ bundle或者自己安装: $ gem install engagement用法 hacker_news = Engagement :: CommentCounter :: HackerNews . newreddit = Engagement...

    基于Transformer编解码模型的文章标题自动生成评论、用BERT进行序列标记和文本分类的模板源码+数据集.zip

    1、该资源内项目代码经过严格调试,下载即用确保可以运行! 2、该资源适合计算机相关专业(如计科...基于Transformer编解码模型的Hacker News文章标题自动生成评论、用BERT进行序列标记和文本分类的模板源码+数据集.zip

    decay:著名的基于投票受欢迎度和时间的排序算法为PHP实现

    衰变 著名的基于投票受欢迎程度和时间的排序算法已为PHP实现。 安装 composer require mtasuandi/decay dev-master 用法 <?...use Mtasuandi \ Decay \ Decay ;...$ c = new Decay ();... * Hacker News

    infinite-monkeys:汇集黑客新闻的智慧

    每一章都对应着Hacker News上的一个热门话题,其中包含了精选的评论和观点,这些内容经过整理,使得读者可以更系统地学习和理解这些领域的核心知识。 为了参与和贡献,读者可以访问项目仓库,通常是通过GitHub,...

    algorithm-sandbox:我想弄清楚Java中的算法的家

    HackerNews的博客中有一篇关于Google开玩笑的不安面试官的博文,说他编码了Homebrew(曾用过我的许多Google员工),但无法反转二叉树,因此他无法为他们工作。 我在这里尝试实现。 top_coder AB

    hn-headline:点击 HN 的诱饵标题

    在描述中提到的“点击 HackerNews 的诱饵标题”,暗示这个项目可能是用来生成或模拟这类标题的工具,或者是分析HN上哪些标题最能引起用户兴趣的研究。它可能通过使用JavaScript来实现,JavaScript是一种广泛用于前端...

    Python-hn在命令行中阅读HN

    标题 "Python-hn在命令行中阅读HN" 指的是一种使用Python编写的命令行工具,它允许用户在终端环境中浏览和互动 Hacker News(HN)的热门故事。Hacker News是一个由Y Combinator运营的社区,用户可以分享和讨论编程、...

Global site tag (gtag.js) - Google Analytics