算法——计算的灵魂(《算法》一本写了近40年的书)

计算机语言从BASIC到C\C++、Java,再到后来的PHP、Ruby等,你方唱罢我登场,让人眼花缭乱。而算法确是计算机科学的核心,万变不离其宗!

算法能为我们节约非常多的资源,甚至能够完成一些不可能完成的任务。在某些需要处理上百万个对象的应用程序中,设计优良算法甚至可以将程序运行的速度提高一百万倍。与此相反,花费金钱和时间去购置新的硬件可能只能将速度提高十倍或是百倍。无论在任何应用领域,精心设计的算法都是解决大型问题最有效的方法。学习算法是非常有趣和令人激动的,因为这是一个历久弥新的领域。20世纪60年代和70年代的研究者用这些算法为我们的今天打下了基础。他们知道,可扩展的算法是未来的关键,而过去几十年算法发展也证明了这一点。现在,基础设施已经完备,人们已经开始利用它们达到各种目的。

21世纪的今天,日益先进的存储手段使信息量呈指数级增长,如何快速处理它们,如何更好地利用它们,这些挑战都需要设计精巧的算法来解决。正如B.Chazelle所说,20世纪是方程的世纪,但21世纪是算法的世纪。本书的重点是学习重要而实用的算法。书中既有精巧、复杂和困难的算法,也有优雅、朴素和简单的算法。在科学和商业应用中,我们的目标是理解前者并熟悉后者,只有这样才能掌握这些有用的工具并学会“算法式思考”以迎接未来的计算性挑战。

本书的作者之一Robert Sedgewick是普林斯顿大学的计算机科学教授。他在Adobe Systems公司担任总监职位,并曾在施乐的帕洛阿尔托研究中心(Xerox PARC)、美国国防部防御分析研究所(the lnsititute for Defense Analyses)和法国国立计算机与自动化研究所(INRIA)从事研究工作,他从斯坦福大学获得了博士学位,是算法宗师Donald E.Knuth的门下高徒。本书另一位作者Kevin Wayne是康奈尔大学博士,普林斯顿大学计算机科学系高级讲师,研究方向包括算法的设计、分析和实现,特别是图和离散优化。

enter image description here

本书前言

本书力图研究当今最重要的计算机算法并将一些最基础的技能传授给广大求知者。它适合用作计算机科学进阶教材,面向已经熟悉了计算机系统并掌握了基本编程技能的学生。本书也可用于自学,或是作为开发人员的参考手册,因为书中实现了许多实用算法并详尽分析了它们的性能特点和用途。这本书取材广泛,很适合作为该领域的入门教材。

算法和数据结构的学习是所有计算机科学教学计划的基础,但它并不只是对程序员和计算机系的学生有用。任何计算机使用者都希望计算机能运行得更快一些或是能解决更大规模的问题。本书中的算法代表了近50年来的大量优秀研究成果,是人们工作中必备的知识。从物理中的N体模拟问题到分子生物学中的基因序列问题,我们描述的基本方法对科学研究而言已经必不可少;从建筑建模系统到模拟飞行器,这些算法已经成为工程领域极其重要的工具;从数据库系统到互联网搜索引擎,算法已成为现代软件系统中不可或缺的一部分。这仅是几个例子而已,随着计算机应用领域的不断扩张,这些基础方法的影响也会不断扩大。

在开始学习这些基础算法之前,我们先要熟悉全书中都将会用到的栈、队列等低级抽象的数据类型。然后我们依次研究排序、搜索、图和字符串方面的基础算法。最后一章将会从宏观角度总结全书的内容。 独特之处本书致力于研究有实用价值的算法。书中讲解了多种算法和数据结构,并提供了大量相关的信息,读者应该能有信心在各种计算环境下实现、调试并应用它们。本书的特点涉及以下几个方面。

算法 书中均有算法的完整实现,并讨论了程序在多个样例上的运行状况。书中的代码都是可以运行的程序而非伪代码,因此非常便于投入使用。书中程序是用Java语言编写的,但其编程风格方便读者使用其他现代编程语言重用其中的大部分代码来实现相同算法。

数据类型 我们在数据抽象上采用了现代编程风格,将数据结构和算法封装在了一起。

应用 每一章都会给出所述算法起到关键作用的应用场景。这些场景多种多样,包括物理模拟与分子生物学、计算机与系统工程学,以及我们熟悉的数据压缩和网络搜索等。

学术性 我们非常重视使用数学模型来描述算法的性能。我们用模型预测算法的性能,然后在真实的环境中运行程序来验证预测。

广度 本书讨论了基本的抽象数据类型、排序算法、搜索算法、图及字符串处理。我们在算法的讨论中研究数据结构、算法设计范式、归纳法和解题模型。这将涵盖20世纪60年代以来的经典方法以及近年来产生的新方法。

我们的主要目标是将今天最重要的实用算法介绍给尽可能广泛的群体。这些算法一般都十分巧妙奇特,20行左右的代码就足以表达。它们展现出的问题解决能力令人叹为观止。没有它们,创造计算智能、解决科学问题、开发商业软件都是不可能的。

本书网站

本书的一个亮点是它的配套网站algs4.cs.princeton.edu。这一网站面向的是老师、学生和专业人士,包含了关于算法和数据结构的丰富资料,均可免费获得。

一份在线大纲 包含了本书内容的结构并提供了链接,浏览起来十分方便。

全部实现代码 书中所有的代码均可以在这里找到,且其形式适合用于程序开发。此外,还包括算法的其他实现,例如高级的实现、书中提及的改进的实现、部分习题的答案以及多个应用场景的客户端代码。我们的重点是用真实的应用环境来测试算法。

习题与答案 网站还提供了一些附加的选择题(只需要一次单击便可获取答案)、很多算法应用的例子、编程练习和答案以及一些有挑战性的难题。

动态可视化 书是死的,但网站是活的,在这里我们充分利用图形类演示了算法的应用效果。

课程资料 网站包含和本书及网上内容对应的一整套幻灯片,以及一系列编程作业、核对表、测试数据和备课手册。

相关资料链接 网站包含大量的链接,提供算法应用的更多背景知识以及学习算法的其他资源。

我们希望这个站点和本书互为补充。一般来说,建议读者在第一次学习某种算法或是希望获得整体概念时看书,并把网站作为编程时的参考或是在线查找更多信息的起点。

作为教材

本书为计算机科学专业进阶的教材。它涵盖了这门学科的核心内容,并能让学生充分锻炼编程、定量推理和解决问题等方面的能力。一般来说,此前学过一门计算机方面的先导课程就足矣,只要熟悉一门现代编程语言并熟知现代计算机系统,就都能够阅读本书。

虽然本书使用Java实现算法和数据结构,但其代码风格使得熟悉其他现代编程语言的人也能看懂。我们充分利用了Java的抽象性(包括泛型),但不会依赖这门语言的独门特性。

书中涉及的多数数学知识都有完整的讲解(少数会有延伸阅读),因此阅读本书并不需要准备太多数学知识,不过有一定的数学基础当然更好。应用场景都来自其他学科的基础内容,同样也在书中有完整介绍。 本书涉及的内容是任何准备主修计算机科学、电气工程、运筹学等专业的学生应了解的基础知识,并且对所有对科学、数学或工程学感兴趣的学生也十分有价值。

背景介绍

这本书意在接续我们的一本基础教材《Java程序设计:一种跨学科的方法》,那本书对计算机领域做了概括性介绍。这两本书合起来可用作两到三个学期的计算机科学入门课程教材,为所有学生在自然科学、工程学或社会科学中解决计算问题提供必备的基础知识。

本书大部分内容来自Sedgewick的算法系列书籍。本质上,本书和该系列的第1版和第2版最接近,但还包含了作者多年教学和学习的经验。Sedgewick的《C算法(第3版)》、《C++算法(第3版)》、《Java算法(第3版)》更适合用作参考书或是高级课程的教材,而本书则是专门为大学一、二年级学生设计的一学期教材,也是最新的基础入门书或从业者的参考书。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值