`

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

 
阅读更多

互联网的出现,意味着"信息大爆炸"。

用户担心的,不再是信息太少,而是信息太多。如何从大量信息之中,快速有效地找出最重要的内容,成了互联网的一大核心问题。

各种各样的排名算法,是目前过滤信息的主要手段之一。对信息进行排名,意味着将信息按照重要性依次排列,并且及时进行更新。排列的依据,可以基于信息本身的特征,也可以基于用户的投票,即让用户决定,什么样的信息可以排在第一位。

下面,我将整理和分析一些基于用户投票的排名算法,打算分成六个部分连载,今天是第一篇。

一、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。

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

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

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

它的数值大小决定了排名随时间下降的速度。

上图可以看到,三根曲线的其他参数都一样,G的值分别为1.5、1.8和2.0。G值越大,曲线越陡峭,排名下降得越快,意味着排行榜的更新速度越快。

知道了算法的构成,就可以调整参数的值,以适用你自己的应用程序。

 

http://www.ruanyifeng.com/blog/2012/02/ranking_algorithm_hacker_news.html

分享到:
评论

相关推荐

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

    基于用户投票的排名算法是一种将信息按照重要性依次排列的方法,该算法广泛应用于互联网中的各种平台,例如 Delicious、Hacker News 和 Reddit 等。这些平台都使用了基于用户投票的排名算法来对信息进行排名,帮助...

    Gray Hat Hacking: The Ethical Hacker's Handbook 5th

    Completely updated and featuring 13 new chapters, Gray Hat Hacking, The Ethical Hacker’s Handbook, Fifth Edition explains the enemy’s current weapons, skills, and tactics and offers field-tested ...

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

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

    一个简单的HackerNews阅读器ReactNativeappAndroidiOS

    Hacker News是一个知名的科技新闻和讨论网站,而这个应用允许用户在Android和iOS设备上方便地浏览和交互Hacker News上的内容。 【描述解析】 描述中提到“一个简单的Hacker News阅读器React Native app (Android / ...

    hackernews.el:Emacs的Hacker News客户端

    `hackernews.el` 是一个专门为 Emacs 设计的 Hacker News 客户端,它允许用户在 Emacs 环境中浏览、阅读以及交互Hacker News 上的热门故事、评论和用户信息。Hacker News 是一个由 Y Combinator 创办的社区,以分享...

    swift-Flamingo-简约的HackerNews阅读器

    Flamingo旨在提供一个直观、高效的平台,让用户可以轻松浏览和参与Hacker News的内容。 **Swift开发** Swift是Apple在2014年推出的一种现代化的、开源的编程语言,用于开发iOS、macOS、watchOS和tvOS的应用。它...

    Wox.Plugin.HackerNews:Wox 的 HackerNews 插件

    Wox 是一款快速启动工具,通过键盘快捷键可以迅速搜索并启动应用程序、打开网页等,而 HackerNews 插件则扩展了 Wox 的功能,让用户可以直接在 Wox 中浏览和访问 HackerNews 上的热门新闻和讨论。 **描述分析:** ...

    HackerNews-API:官方 Hacker News API 的 Javascript 包装器

    HackerNews-API概述HackerNews-API 是一个 Node.js 包装器,用于访问官方v0。安装HackerNews-API 的当前生产版本可通过: npm install hackernews-api用法 > var hn = require ( 'hackernews-api' ) ;> hn . getItem...

    类hackernews源码iNews.zip

    我们都是苹果的忠实用户,经常会互相分享一些应用,久而久之也就萌发了这个念头:做一个分享苹果新闻和应用的社区,对于苹果在中国这几年设备数据大增,应该有很多人跟我们有同样的需求,于是就开始做了;...

    read:类似于hackernews的网站,用户可以在其中发布文章,其他人可以阅读和投票

    类似于hackernews的网站,用户可以在其中发布文章,其他人可以阅读和投票。 眼见为实。.在这里查看Alpha版本: (它仍在建设中!) 现在,我们有: 阅读文章 发表新文章 文章类别 用户登录名(带有用户名)以...

    采用NX编写的HackerNews克隆拥有实时更新和动画

    在这个项目中,开发者使用NX来创建了一个类似于Hacker News的Web应用,Hacker News是一个流行的在线社区,用户可以分享和讨论编程和技术相关的新闻。关键点在于这个克隆版不仅实现了基本的功能,还加入了实时更新和...

    Go-用Go编写的HackerNews客户端

    这个客户端允许用户在终端上浏览Hacker News的帖子,查看排名、标题、作者和评论,而无需通过网页浏览器。 项目的核心知识点包括: 1. **Go语言基础**:了解Go的基本语法,如变量声明、函数定义、控制流程(if/...

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

    9. **社区参与**: Hacker News本身就是一个技术社区,通过这个CLI工具,用户可以在不离开命令行的情况下参与到讨论中,体现了开源软件的精神和社区的力量。 总之,“Python-一个HackerNews命令行CLI浏览界面”项目...

    hackernews7-svelte:精简的Hacker News阅读器Framework7

    HackerNews7-svelte 另一个由和支持的黑客新闻阅读器 关于 这是一个演示应用程序,展示了如何使开发混合应用程序变得容易。 特征 此应用程序演示了Framework7-svelte v6功能。 该演示使用开发。 故事 故事 组件/...

    HackerNewsReactNative用ReactNative完成的HackerNews客户端

    本项目——"HackerNews React Native",正是基于React Native技术,为HackerNews社区打造的一款移动端客户端,旨在提供简洁、高效的新闻阅读体验。 React Native是Facebook推出的一种跨平台开发框架,它允许开发者...

    Android-materialistic-MaterialDesgin风格的HackerNews客户端

    2. **Hacker News API**:Hacker News是一个流行的科技新闻和讨论论坛,materialistic客户端通过使用其公开的API来获取和展示新闻、评论和用户信息。开发者需要理解API的工作原理,包括如何请求数据,解析JSON响应,...

    NewsNerd HackerBot,Hacker News的自动化抓取工具

    NewsNerd HackerBot:一个Hacker News 机器人它可以自动从 Hacker News 上抓取各种类型的新闻故事,比如最热门的、最新的或者特定主题的故事。- 关键词过滤:如果你对某个特定主题感兴趣,比如想了解有关某个知名...

    Hacker's delight("高效算法的奥秘”或者“算法心得”)的1ED和2ed文档

    Hacker's delight(高效算法的奥秘”或者“算法心得”)的1ED和2ed文档,意译成中文叫做“高效算法的奥秘”和“算法心得”,相比于传统的算法书记,Hacker's delight更注重于软硬件结合的方式来实现算法,适宜研究...

    slashernews:SlasherNews-HackerNews克隆

    综上所述,SlasherNews 是一个为开发者设计的新闻分享平台,采用现代 web 技术栈 Angular 和 Ruby on Rails 构建,提供了类似 HackerNews 的用户体验。它不仅是一个实用的工具,也是学习这两种技术的好资源,对于想...

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

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

Global site tag (gtag.js) - Google Analytics