算法思想无处不在,在计算机科学和其他领域中的体现都很明显。因特网路由标准的一些 主要变化,可以看成是人们对一种最短路径算法的不足和另一种算法的相对优势的争论。生物学家用于表示基因和基因组之间相似性的基本概念是用算法定义的。经济学家对组合拍卖在实 践中的可行性所表达的担忧,部分原因是在一些特殊情况下,这些拍卖包含计算难解的搜索问 题。而且,算法概念不仅限于众所周知的、长期存在的问题,在很多领域出现的新问题中,人 们也经常看到这些思想的身影。有一天,雅虎的一位科学家在午餐时告诉我们,他们向用户提 供广告的系统可以归结为一系列问题,这些问题在很大程度上可以用网络流问题来建模。我们 去纽约时碰巧遇到以前的一名学生,他当时是一名管理顾问,负责为大型医院提供人力资源服 务,也讲述了类似的事情。
关键不只是算法有很多应用。在更深的层面上,算法这一主题是一个强大的“镜头”,透过它可以查看计算机科学领域。算法问题构成了计算机科学的核心,但它们很少以整洁、精确的数学问题的形式出现。相反,它们往往有许多杂乱的、应用程序特定的细节,由一些至关重要和一些无关紧要的东西纠缠在一起。因此,算法问题由两个基本部分组成:得到数学上整洁的问题核心,然后根据问题结构确定适当的算法设计技术。这两个部分相互影响:越自如地运用各种可能的设计技术,也就越能认识到世上混乱问题中的整洁形式描述。在最有效的情况下,
算法思想不但能提供适当问题的解决方案,而且它们构成了一种语言,让你可以清晰地表达基本问题。
学习算法当选Cornell大神Kleinberg的《算法设计》,其实这是一本最适合入门经典的算法书。
原版
豆瓣如何评论这本书?
这是我看到的最好的一本算法书,以实例教学的
7.1-2, 4, 11, 12.4, 13; 思路清晰,描述详细。已解答的习题价值很高
解了what和why, how自然水到渠成,颇有些只可意会不可言传的神韵。被虐半学期之后,才略微地体会到“啊哈原来如此”的愉悦
作为master阶段算法课的教科书,实实在在地让我知道了何为algorithm"design"
非常棒的教材,让我完全克服了对算法的恐惧
看这本书我第一次理解了什么是Invariant,以及如何给算法做数学分析。 伪代码写的也很好,算法复杂度的讨论也很实用。
刚刚上架的中文版
算法设计
- 众多名校采用的算法设计课程教材;
- 用实际示例阐明枯燥的算法理论;
- 更注重算法设计思路而非算法复杂度分析;
- 本书覆盖面广,且含有200多道精彩的习题,最后还扩展了PSPACE问题、参数复杂性等内容。
这是一本被众多名校采用的算法设计课程教材,强调用实际示例阐明枯燥的算法理论,更注重算法设计思路而非算法复杂度分析。本书采用新颖的教学方式,通过分析真实世界的问题来激发算法思想。两位作者以一种清晰、直接的方式,指导学生自己分析和定义问题,并从中找出适用于给定场景的算法设计原则。本书鼓励读者更深入地理解算法设计过程,探索算法在计算机科学的更广阔领域中的应用。
本书具有以下特色:
- 强调问题分析和设计方法;
- 遵循结构化教学法,引导学生掌握问题形式化、算法设计和算法分析的全过程;
- 通过一系列带解答的问题,展示计算机科学家设计和应用算法的过程;
- 包含 200 多道作业题,其中一些题目出自 Yahoo! 和 Oracle 等公司;
- 提供广泛用于处理 NP 困难问题和随机应用的算法,这些是极其重要的算法主题。
从《算法设计》里你可以学习到什么?
本书适用于这样的学生:他们应该已经学完了基于编程的两学期计算机科学引导课程(标准的“CS1/CS2”课程),已编写过实现基本算法的程序,操作过离散结构(树和图),并应用过基本的数据结构(如数组、列表、队列和堆栈)。因为 CS1/CS2 与第一门算法课程之间的衔接并不是完全标准的,所以我们在本书开始介绍了一些自包含的主题,某些院校中学过 CS1/CS2 的学生会很熟悉这些内容,但其他院校可能将这些内容放在第一门算法课程的教学大纲中。因此,这些内容既可以用于复习,也可以当作新内容处理。我们加入这些内容,是希望本书适用于更广泛的课程,并在假设的预备知识方面更灵活。
按照上述思路,我们利用了许多计算机科学和相关领域的问题来开发基本的算法设计技术。这里列出一些有代表性的例子,我们相当详细地讨论了来自下列领域的应用,包括系统和网络的应用程序(缓存、交换、互联网上的域间路由),人工智能(规划、博弈、霍普菲尔德网络),计算机视觉(图像分割),数据挖掘(变更点检测、聚类),运筹学(航线调度),以及计算生物学(序列比对、RNA 二级结构)。
计算难解性的概念,特别是 NP 完全性,在本书中起着重要作用。这与我们如何考虑算法设计的整个过程是一致的。有时,在应用领域出现的有趣问题存在有效的解决方案,而有时候它可以被证明是 NP 完全的。为了全面考察新的算法问题,人们应该能够同样熟练地探索这两个方面。由于计算机科学中的许多自然问题都是 NP 完全的,因此开发处理难解问题的方法已成为算法研究中的一个关键问题。本书以很大篇幅反映了这一主题。不应将发现问题是 NP 完全的看作故事的结束,而应该将其看作是对我们开始寻找近似算法、启发式局部搜索技术或易解的特殊情况的鼓励。我们对这 3 种方法都进行了广泛的探讨。
详细目录
作者简介
乔恩·克莱因伯格(Jon Kleinberg),康奈尔大学计算机科学教授。他于1996年从麻省理工学院获得博士学位。他荣获过美国国家科学基金会事业奖、海军研究局青年研究员奖、IBM 杰出创新奖和美国国家科学院创新研究奖等众多奖项。 他的研究集中在算法上,特别是与网络结构和信息相关的算法,以及这些算法在信息科学、优化、数据挖掘以及计算生物学等方面的应用。
伊娃·塔多斯(Éva Tardos),康奈尔大学计算机科学教授。她是美国艺术与科学学院院士、ACM会士。她荣获过美国国家科学基金会总统青年研究员奖和富尔克森奖等众多奖项。
她的研究兴趣主要集中在图和网络问题的算法设计和分析上。她因在网络流算法和网络问题的近似算法方面的工作而闻名。她最近的工作重点是算法博弈论。
从这里就开启你的算法之旅吧!希望本篇文章能帮助到您,祝您阅读愉快!