算法导论(原书第3版)/计算机科学丛书 [Introduction to Algorithms, third edition]

算法导论(原书第3版)/计算机科学丛书 [Introduction to Algorithms, third edition] pdf epub mobi txt 电子书 下载 2025

[美] Thomas H.Cormen,[美] Charles E.Leiserson,[美] Ronald L.Rivest,[美] Clifford Stein 著,殷建平,徐云,王刚 等 译
图书标签:
  • 算法
  • 数据结构
  • 计算机科学
  • 算法分析
  • 设计与分析
  • 编程
  • 经典教材
  • MIT
  • 算法导论
  • 计算机算法
想要找书就要到 静流书站
立刻按 ctrl+D收藏本页
你会得到大惊喜!!
出版社: 机械工业出版社
ISBN:9787111407010
版次:1
商品编码:11144230
品牌:机工出版
包装:平装
丛书名: 计算机科学丛书
外文名称:Introduction to Algorithms, third edition
开本:16开
出版时间:2012-12-01
用纸:胶版纸
页数:796
正文

具体描述

产品特色

编辑推荐

  MIT四大名师联手铸就,影响全球千万程序员的“算法圣经”!国内外千余所高校采用!

相关好书推荐:









更多精彩,点击进入品牌店查阅>>


内容简介

  在有关算法的书中,有一些叙述非常严谨,但不够全面;另一些涉及了大量的题材,但又缺乏严谨性。《算法导论(原书第3版)/计算机科学丛书》将严谨性和全面性融为一体,深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。全书各章自成体系,可以作为独立的学习单元;算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂;说明和解释力求浅显易懂,不失深度和数学严谨性。
  《算法导论(原书第3版)/计算机科学丛书》全书选材经典、内容丰富、结构合理、逻辑清晰,对本科生的数据结构课程和研究生的算法课程都是非常实用的教材,在IT专业人员的职业生涯中,《算法导论(原书第3版)/计算机科学丛书》也是一本案头必备的参考书或工程实践手册。
  第3版的主要变化:
  ·新增了van Emde Boas树和多线程算法,并且将矩阵基础移至附录。
  ·修订了递归式(现在称为“分治策略”)那一章的内容,更广泛地覆盖分治法。
  ·移除两章很少讲授的内容:二项堆和排序网络。
  ·修订了动态规划和贪心算法相关内容。
  ·流网络相关材料现在基于边上的全部流。
  ·由于关于矩阵基础和Strassen算法的材料移到了其他章,矩阵运算这一章的内容所占篇幅更小。
  ·修改了对Knuth-Morris-Pratt字符串匹配算法的讨论。
  ·新增100道练习和28道思考题,还更新并补充了参考文献。

作者简介

  Thomas H. Cormen (托马斯·科尔曼),达特茅斯学院计算机科学系教授、系主任。目前的研究兴趣包括:算法工程、并行计算、具有高延迟的加速计算。他分别于1993年、1986年获得麻省理工学院电子工程和计算机科学博士、硕士学位,师从Charles E. Leiserson教授。由于他在计算机教育领域的突出贡献,Cormen教授荣获2009年ACM杰出教员奖。

  Charles E. Leiserson(查尔斯·雷瑟尔森),麻省理工学院计算机科学与电气工程系教授,Margaret MacVicar Faculty Fellow。他目前主持MIT超级计算技术研究组,并是MIT计算机科学和人工智能实验室计算理论研究组的成员。他的研究兴趣集中在并行和分布式计算的理论原理,尤其是与工程现实相关的技术研究。Leiserson教授拥有卡内基·梅隆大学计算机科学博士学位,还是ACM、IEEE和SIAM的会士。

  Ronald L. Rivest (罗纳德·李维斯特),现任麻省理工学院电子工程和计算机科学系安德鲁与厄纳·维特尔比(Andrew and Erna Viterbi)教授。他是MIT计算机科学和人工智能实验室的成员,并领导着其中的信息安全和隐私中心。他1977年从斯坦福大学获得计算机博士学位,主要从事密码安全、计算机安全算法的研究。他和Adi Shamir和Len Adleman一起发明了RSA公钥算法,这个算法在信息安全中获得大的突破,这一成果也使他和Shamir、Adleman一起得到2002年ACM图灵奖。他现在担任国家密码学会的负责人。

  Clifford Stein(克利福德·斯坦),哥伦比亚大学计算机科学系和工业工程与运筹学系教授,他还是工业工程与运筹学系的系主任。在加入哥伦比亚大学大学之前,他在达特茅斯学院计算机科学系任教9年。Stein教授拥有MIT硕士和博士学位。他的研究兴趣包括:算法的设计与分析,组合优化、运筹学、网络算法、调度、算法工程和生物计算。

内页插图

精彩书评

  ★“鉴于数据量的爆炸性增长,和计算应用的多样性,现在比以往更需要有效算法。这本书条理清晰,是一本非常好的算法设计与分析方面的导论性书籍。每章前半部分介绍了讲授和学习算法的有效方法,后半部分为更专业的读者和求知欲强的学生提供了更引人入胜的资料来讨论这个迷人领域的各种可能性和挑战。”
  ——Shang-Hua Teng(腾尚华),南加州大学维特比工学院计算机系Seeley G. Mudd 教授

  ★“本书是算法领域的一部经典著作,书中系统、全面地介绍了现代算法:从较快算法和数据结构到用于看似难以解决问题的多项式时间算法;从图论中的经典算法到用于字符匹配、计算集合和数论的特殊算法。本书第3版尤其增加了两章专门讨论van Emde Boas树(有用的数据结构之一)和多线程算法(日益重要的一个主题)。”
  ——Daniel Spielman,耶鲁大学计算机科学和应用数学Henry Ford II教授

目录

出版者的话
译者序
前言
第一部分 基础知识
第1章 算法在计算中的作用
1.1 算法
1.2 作为一种技术的算法
思考题
本章注记
第2章 算法基础
2.1 插入排序
2.2 分析算法
2.3 设计算法
2.3.1 分治法
2.3.2 分析分治算法
思考题
本章注记
第3章 函数的增长
3.1 渐近记号
3.2 标准记号与常用函数
思考题
本章注记
第4章 分治策略
4.1 最大子数组问题
4.2 矩阵乘法的Strassen算法
4.3 用代入法求解递归式
4.4 用递归树方法求解递归式
4.5 用主方法求解递归式
4.6 证明主定理
4.6.1 对b的幂证明主定理
4.6.2 向下取整和向上取整
思考题
本章注记
第5章 概率分析和随机算法
5.1 雇用问题
5.2 指示器随机变量
5.3 随机算法
5.4 概率分析和指示器随机变量的进一步使用
5.4.1 生日悖论
5.4.2 球与箱子
5.4.3 特征序列
5.4.4 在线雇用问题
思考题
本章注记


第二部分 排序和顺序统计量
第6章 堆排序
6.1 堆
6.2 维护堆的性质
6.3 建堆
6.4 堆排序算法
6.5 优先队列
思考题
本章注记
第7章 快速排序
7.1 快速排序的描述
7.2 快速排序的性能
7.3 快速排序的随机化版本
7.4 快速排序分析
7.4.1 最坏情况分析
7.4.2 期望运行时间
思考题
本章注记
第8章 线性时间排序
8.1 排序算法的下界
8.2 计数排序
8.3 基数排序
8.4 桶排序
思考题
本章注记
第9章 中位数和顺序统计量
9.1 最小值和最大值
9.2 期望为线性时间的选择算法
9.3 最坏情况为线性时间的选择算法
思考题
本章注记


第三部分 数据结构
第10章 基本数据结构
10.1 栈和队列
10.2 链表
10.3 指针和对象的实现
10.4 有根树的表示
思考题
本章注记
第11章 散列表
11.1 直接寻址表
11.2 散列表
11.3 散列函数
11.3.1 除法散列法
11.3.2 乘法散列法
11.3.3 全域散列法
11.4 开放寻址法
11.5 完全散列
思考题
本章注记
第12章 二叉搜索树
12.1 什么是二叉搜索树
12.2 查询二叉搜索树
12.3 插入和删除
12.4 随机构建二叉搜索树
思考题
本章注记
第13章 红黑树
13.1 红黑树的性质
13.2 旋转
13.3 插入
13.4 删除
思考题
本章注记
第14章 数据结构的扩张
14.1 动态顺序统计
14.2 如何扩张数据结构
14.3 区间树
思考题
本章注记


第四部分 高级设计和分析技术
第15章 动态规划
15.1 钢条切割
15.2 矩阵链乘法
15.3 动态规划原理
15.4 最长公共子序列
15.5 最优二叉搜索树
思考题
本章注记
第16章 贪心算法
16.1 活动选择问题
16.2 贪心算法原理
16.3 赫夫曼编码
16.4 拟阵和贪心算法
16.5 用拟阵求解任务调度问题
思考题
本章注记
第17章 摊还分析
17.1 聚合分析
17.2 核算法
17.3 势能法
17.4 动态表
17.4.1 表扩张
17.4.2 表扩张和收缩
思考题
本章注记


第五部分 高级数据结构
第18章 B树
18.1 B树的定义
18.2 B树上的基本操作
18.3 从B树中删除关键字
思考题
本章注记
第19章 斐波那契堆
19.1 斐波那契堆结构
19.2 可合并堆操作
19.3 关键字减值和删除一个结点
19.4 最大度数的界
思考题
本章注记
第20章 van Emde Boas树
20.1 基本方法
20.2 递归结构
20.2.1 原型van Emde Boas结构
20.2.2 原型van Emde Boas结构上的操作
20.3 van Emde Boas树及其操作
20.3.1 van Emde Boas树
20.3.2 van Emde Boas树的操作
思考题
本章注记
第21章 用于不相交集合的数据结构
21.1 不相交集合的操作
21.2 不相交集合的链表表示
21.3 不相交集合森林
*21.4 带路径压缩的按秩合并的分析
思考题
本章注记


第六部分 图算法
第22章 基本的图算法
22.1 图的表示
22.2 广度优先搜索
22.3 深度优先搜索
22.4 拓扑排序
22.5 强连通分量
思考题
本章注记
第23章 最小生成树
23.1 最小生成树的形成
23.2 Kruskal算法和Prim算法
思考题
本章注记
第24章 单源最短路径
24.1 Bellman-Ford算法
24.2 有向无环图中的单源最短路径问题
24.3 Dijkstra算法
24.4 差分约束和最短路径
24.5 最短路径性质的证明
思考题
本章注记
第25章 所有结点对的最短路径问题
25.1 最短路径和矩阵乘法
25.2 Floyd�瞁arshall算法
25.3 用于稀疏图的Johnson算法
思考题
本章注记
第26章 最大流
26.1 流网络
26.2 FordFulkerson方法
26.3 最大二分匹配
26.4 推送重贴标签算法
26.5 前置重贴标签算法
思考题
本章注记


第七部分 算法问题选编
第27章 多线程算法
27.1 动态多线程基础
27.2 多线程矩阵乘法
27.3 多线程归并排序
思考题
本章注记
第28章 矩阵运算
28.1 求解线性方程组
28.2 矩阵求逆
28.3 对称正定矩阵和最小二乘逼近
思考题
本章注记
第29章 线性规划
29.1 标准型和松弛型
29.2 将问题表达为线性规划
29.3 单纯形算法
29.4 对偶性
29.5 初始基本可行解
思考题
本章注记
第30章 多项式与快速傅里叶变换
30.1 多项式的表示
30.2 DFT与FFT
30.3 高效FFT实现
思考题
本章注记
第31章 数论算法
31.1 基础数论概念
31.2 最大公约数
31.3 模运算
31.4 求解模线性方程
31.5 中国余数定理
31.6 元素的幂
31.7 RSA公钥加密系统
31.8 素数的测试
31.9 整数的因子分解
思考题
本章注记
第32章 字符串匹配
32.1 朴素字符串匹配算法
32.2 RabinKarp算法
32.3 利用有限自动机进行字符串匹配
32.4 Knuth-Morris-Pratt算法
思考题
本章注记
第33章 计算几何学
33.1 线段的性质
33.2 确定任意一对线段是否相交
33.3 寻找凸包
33.4 寻找最近点对
思考题
本章注记
第34章 NP完全性
34.1 多项式时间
34.2 多项式时间的验证
34.3 NP完全性与可归约性
34.4 NP完全性的证明
34.5 NP完全问题
34.5.1 团问题
34.5.2 顶点覆盖问题
34.5.3 哈密顿回路问题
34.5.4 旅行商问题
34.5.5 子集和问题
思考题
本章注记
第35章 近似算法
35.1 顶点覆盖问题
35.2 旅行商问题
35.2.1 满足三角不等式的旅行商问题
35.2.2 一般旅行商问题
35.3 集合覆盖问题
35.4 随机化和线性规划
35.5 子集和问题
思考题
本章注记
第八部分 附录:数学基础知识
附录A 求和
A.1 求和公式及其性质
A.2 确定求和时间的界
思考题
附录注记
附录B 集合等离散数学内容
B.1 集合
B.2 关系
B.3 函数
B.4 图
B.5 树
B.5.1 自由树
B.5.2 有根树和有序树
B.5.3 二叉树和位置树
思考题
附录注记
附录C 计数与概率
C.1 计数
C.2 概率
C.3 离散随机变量
C.4 几何分布与二项分布
*C.5 二项分布的尾部
思考题
附录注记
附录D 矩阵
D.1 矩阵与矩阵运算
D.2 矩阵基本性质
思考题
附录注记
参考文献
索引

精彩书摘

  证明 每个结点的秩从0开始,并且只有执行了LINK操作,它才会增加。因为最多有n—1个UNION操作,所以同样最多有n—1个LINK操作。因为每个LINK操作或者不改变任何的秩,或者将某结点的秩加1,所以所有的秩最大为n—1。
  引理21.6提供了一个关于结点秩的较弱的界。事实上,每个结点的秩最大为(lgn)(见练习21.4—2)。然而,引理21.6的这个较松的界已足够满足我们的要求。
  时间界的证明 我们将利用摊还分析中的势方法(见17.3节)来证明O(ma(n))的时间界。在进行摊还分析时,为了方便起见,我们假设不调用UNION操作,而是调用LINK操作。也就是说,因为LINK过程的参数是指向两个根的指针,故我们独立使用相应的FIND—SET操作。下面的引理说明即使因调用UNION而导致额外的FIND—SET操作,其渐近运行时间仍然保持不变。

  ……

前言/序言

  在计算机出现之前,就有了算法。现在有了计算机,就需要更多的算法,算法是计算的核心。
  本书提供了对当代计算机算法研究的一个全面、综合的介绍。书中给出了多个算法,并对它们进行了较为深入的分析,使得这些算法的设计和分析易于被各个层次的读者所理解。我们力求在不牺牲分析的深度和数学严密性的前提下,给出深入浅出的说明。
  书中每一章都给出了一个算法、一种算法设计技术、一个应用领域或一个相关的主题。算法是用英语和一种“伪代码”来描述的,任何有一点程序设计经验的人都能看得懂。书中给出了244幅图,说明各个算法的工作过程。我们强调将算法的效率作为一种设计标准,对书中的所有算法,都给出了关于其运行时间的详细分析。
  本书主要供本科生和研究生的算法或数据结构课程使用。因为书中讨论了算法设计中的工程问题及其数学性质,所以,本书也可以供专业技术人员自学之用。
  本书是第3版。在这个版本里,我们对全书进行了更新,包括新增了若干章、修订了伪代码等。
  致使用本书的教师
  本书的设计目标是全面、适用于多种用途。它可用于若干课程,从本科生的数据结构课程到研究生的算法课程。由于书中给出的内容比较多,只讲一学期一般讲不完,因此,教师们应该将本书看成是一种“缓存区”或“瑞典式自助餐”,从中挑选出能最好地支持自己希望教授的课程的内容。
  教师们会发现,要围绕自己所需的各个章节来组织课程是比较容易的。书中的各章都是相对独立的,因此,你不必担心意想不到的或不必要的各章之间的依赖关系。每一章都是以节为单位,内容由易到难。如果将本书用于本科生的课程,可以选用每一章的前面几节内容;用于研究生的课程中,则可以完整地讲授每一章。
  全书包含957道练习和158道思考题。每一节结束时给出练习,每一章结束时给出思考题。练习一般比较短,用于检查学生对书中内容的基本掌握情况。有一些是简单的自查性练习,有一些则要更充实,可以作为家庭作业布置给学生。每一章后的思考题都是一些叙述较为详细的实例研究,它们常常会介绍一些新的知识。一般来说,这些思考题都会包含几个小问题,引导学生逐步得到问题的解。
  鉴于本书前几版使用的反馈,我们在本书配套网站上公布了其中一些练习和思考题的答案(但不是全部)。我们会定期更新这些答案,因此需要教师每次授课前都到这个网站上来查看。
  在那些不太适合本科生、更适合研究生的章节和练习前面,都加上了星号(�常�。带星号的章节也不一定就比不带星号的更难,但可能要求了解更多的数学知识。类似地,带星号的练习可能要求有更好的数学背景或创造力。
  致使用本书的学生
  希望本教材能为学生们提供关于算法这一领域的有趣介绍。我们力求使书中给出的每一个算法都易于理解和有趣。为了在同学们遇到不熟悉或比较困难的算法时提供帮助,我们逐个步骤地描述每一个算法。此外,为了便于大家理解书中对算法的分析,对于其中所需的数学知识,我们给出了详细的解释。如果对某一主题已经有所了解,会发现根据书中各章的编排顺序,可以跳过一些介绍性的小节,直接阅读更高级的内容。
  本书是一本大部头著作,读者所修的课程可能只讲授其中的一部分。我们试图使它能成为一本现在对读者有用的教材,将来在读者的职业生涯中,也能成为一本案头的数学参考书或工程实践手册。
  阅读本书需要哪些预备知识呢·
  读者需要有一些程序设计方面的经验,尤其需要理解递归过程和简单的数据结构,如数组和链表。
  读者应该能较为熟练地利用数学归纳法进行证明。书中有一些内容要求读者具备初等微积分方面的知识。除此之外,本书的第一部分和第八部分将介绍读者需要用到的所有数学技巧。
  我们收到读者的反馈,他们强烈希望提供练习和思考题的答案,为此,我们在站上给出了少数练习和思考题的答案,读者可以根据我们的答案来检验自己的解答。
  致使用本书的专业技术人员
  本书涉及的主题非常广泛,因而是一本很好的算法参考手册。因为每一章都是相对独立的,所以读者可以重点查阅自己感兴趣的主题。
  在我们所讨论的算法中,多数都有着极大的实用价值。因此,我们在书中涉及了算法实现方面的考虑和其他工程方面的问题。对于那些为数不多的、主要具有理论研究价值的算法,通常还给出其实用的替代算法。
  如果希望实现这些算法中的任何一个,你会发现将书中的伪代码翻译成你熟悉的某种程序设计语言是一件相当直接的事。伪代码被设计成能够清晰、简明地描述每一个算法。因此,我们不考虑错误处理和其他需要对读者所用编程环境有特定假设的软件工程问题。我们力求简单而直接地给出每一个算法,而不会让某种特定程序设计语言的特殊性掩盖算法的本质内容。
  如果你是在课堂外使用本书,那么可能无法从教师那里得到答案来验证自己的解答,因此,我们在网站上给出了部分练习和思考题的答案,读者可以免费下载参考。
  致我们的同事
  我们在本书中给出了详尽的参考文献。每一章在结束时都给出了“本章注记”,介绍一些历史性的细节和参考文献。但是,各章的注记并没有提供整个算法领域的全部参考文献。有一点可能是让人难以置信的,就是在本书这样一本大部头中,由于篇幅的原因,很多有趣的算法都没能包括进来。
  尽管学生们发来了大量的请求,希望我们提供思考题和练习的解答,但我们还是决定基本上不提供思考题和练习的参考答案(少数除外),以打消学生们试图查阅答案,而不是自己动手得出答案的念头。
  第3版中所做的修改
  在本书的第2版和第3版之间有哪些变化呢·这两版之间的变化量和第2版与第1版之间的变化量相当,正如在第2版的变化中所说,这些变化可以说不太大,也可以说很大,具体要看读者怎么看待这些变化了。
  快速地浏览一遍目录,你就会发现,第2版中的多数章节在第3版中都出现了。在第3版中,去掉了两章和一节的内容,新增加了三章以及两节的内容。如果单从目录来判断第3版中改动的范围,得出的结论很可能是改动不大。
  我们依然保持前两版的组织结构,既按照问题领域又根据技术来组织章节内容。书中既包含基于技术的章,如分治法、动态规划、贪心算法、摊还分析、NP完全性和近似算法,也包含关于排序、动态集的数据结构和图问题算法的完整部分。我们发现虽然读者需要了解如何应用这些技术来设计和分析算法,但是思考题中很少提示应用哪个技术来解决这些问题。
  下面总结了第3版的主要变化:
  新增了讨论van Emde Boas树和多线程算法的章节,并且将矩阵基础移至附录。
  修订了递归式那一章的内容,更广泛地覆盖分治法,并且前两节介绍了应用分治法解决两个问题。4.2节介绍了用于矩阵乘法的Strassen算法,关于矩阵运算的内容已从本章移除。
  移除两章很少讲授的内容:二项堆和排序网络。排序网络中的关键思想——0-1原理,在本版的思考题8-7中作为比较交换算法的0-1排序引理进行介绍。斐波那契堆的处理不再依赖二项堆。
  修订了动态规划和贪心算法相关内容。与第2版中的装配线调度问题相比,本版用一个更有趣的问题——钢条切割来引入动态规划。而且,我们比在第2版中更强调助记性,并且引入子问题图这一概念来阐释动态规划算法的运行时间。在我们给出的贪心算法例子(活动选择问题)中,我们以更直接的方式给出贪心算法。
  我们从二叉搜索树(包括红黑树)删除一个结点的方式,现在保证实际所删除的结点就是请求删除的结点(在前两版中,有些情况下某个其他结点可能被删除)。用这种新的方式删除结点,如果程序的其他部分保持指针指向树中的结点,那么终止时就不会错误地将指针指向已删去的结点。
  流网络相关材料现在基于边上的全部流。这种方法比前两版中使用的净流更直观。
  由于关于矩阵基础和Strassen算法的材料移到了其他章,矩阵运算这一章的内容比第2版中所占的篇幅更小。
  修改了对Knuth-Morris-Pratt字符串匹配算法的讨论。
  修正了上一版中的一些错误。在网站上,这些错误大多数都已在第2版的勘误中给出,但是有些没有给出。
  根据许多读者的要求,我们改变了书中伪代码的语法,现在用“=”表示赋值,用“==”表示检验相等,正如C、C++、Java和Python所用的。同样,我们不再使用关键字do和then而是使用“//”作为程序行末尾的注释符号。我们现在还使用点标记法表明对象属性。书中的伪代码仍是过程化的,而不是面向对象的。换句话说,我们只是简单地调用过程,将对象作为参数传递,而不是关于对象的运行方法。
  新增100道练习和28道思考题,还更新并补充了参考文献。
  最后,我们对书中的语句、段落和小节进行了一些调整,以使本书条理更清晰。
  网站
  读者可以通过网站来获取补充资料,以及与我们联系。这个网站上给出了已知错误的清单、部分练习和思考题的答案等。此外,网站上还告诉读者如何报告错误或者提出建议。
  第3版致谢
  我们已经与MIT Press合作20多年,建立了很好的合作关系!感谢Ellen Faran、Bob Prior、Ada Brunstein和Mary Reilly的帮助和支持。
  在出版第3版时,我们在达特茅斯学院计算机科学系、MIT计算机科学与人工智能实验室、哥伦比亚大学工业工程与运筹学系从事教学和科研工作。感谢这些学校和同事为我们提供的支持和实验环境。
  Julie Sussman,P.P.A担当本书第3版的技术编辑,再次拯救了我们。每次审阅,我们都觉得已经消除了错误,但是Julie还是发现了许多错误。她还帮我们改进了几处文字表述。如果有技术编辑名人堂,Julie一定第一轮就可以入选。Julie是非凡的,我们怎么感谢都是不够的。Priya Natarajan也发现了一些错误,使得我们可以在将本书交给出版社前修正这些错误。书中的任何错误(毫无疑问,一定存在一些错误)都由作者负责(或许这些错误有些是Julie审阅材料后引入的)。
  对于van Emde Boas树的处理出自于Erik Demaine的笔记,转而也受到Michael Bender的影响。此外,我还将Javed Aslam、Bradley Kuszmaul和Hui Zha的思想也整合到这一版。
  多线程算法这一章是基于与Harald Prokop一起撰写的笔记,其他在MIT从事Cilk项目的同事也对本部分内容有所贡献,包括Bradley Kuszmaul和Matteo Frigo。多线程伪代码的设计灵感来自MIT Cilk扩展到C,以及由Cilk Arts的Cilk++扩展到C++。
  我们还要感谢许多第1版和第2版的读者,他们报告了所发现的错误,或者提出了改进本书的建议。我们修正了全部报告来的真实错误,并且尽可能多地采纳了读者的建议。我们很高兴有这么多的人为本书做出贡献,但是很遗憾我们无法全部列出这些贡献者。
  最后,非常感谢我们各自的妻子Nicole Cormen、Wendy Leiserson、Gail Rivest和Rebecca Ivry,还有我们的孩子Ricky、Will、Debby和Katie Leiserson,Alex和Christopher Rivest,以及Molly、Noah和Benjamin Stein。感谢他们在我们写作本书过程中给予的爱和支持。正是由于有了来自家庭的耐心和鼓励,本书的写作工作才得以完成。谨将此书献给他们。
  Thomas H.Cormen,新罕布什尔州黎巴嫩市
  Charles E.Leiserson,马萨诸塞州剑桥市
  Ronald L.Rivest,马萨诸塞州剑桥市
  Clifford Stein,纽约州纽约市
  译者序
  我从1994年开始每年都为本科生讲授《算法设计与分析》课程,粗略地统计一下发现至今已有5000余名各类学生听过该课。算法的重要性不言而喻,因为不管新概念、新方法、新理论如何引人注目,信息的表示与处理总是计算技术(含软件、硬件、应用、网络、安全、智能等)永恒的主题。信息处理的核心是算法,在大数据时代,设计高效的算法显得格外重要。
  当初,为了教好这门基础必修课,提高教学质量,我觉得应该从教学内容的改革入手,具体来说,采用的教材应该与国际一流大学接轨。1997年访美期间,在Stanford大学了解到他们采用的教材是Thomas H. Cormen等编著的《Introduction to Algorithms》,于是从Stanford书店买了一本带回来,从第二年开始便改用该书作教材。至今,15年过去了,我们一直追随其变迁,从第二版到第三版。教学实践证明它确实是一本好教材,难怪世界范围内包括MIT、CMU、Stanford、UCB、Cornell、UIUC等国际国内名校在内的1000余所大学都一直用它作为教材或教学参考书,也难怪它印数巨大且在《高引用计算机科学文献》(《Most Cited Computer Science Citations》)一览表中名列前茅。
  这是一本有1200多页的厚书,教学内容非常丰富,不但涵盖了典型算法、算法分析、算法设计方法和NP完全等内容,而且还包括数据结构,甚至高级数据结构的介绍。后者可作为国内《数据结构》课程的教材或教学参考资料。在学时有限的情况下,要在本科阶段教完前者的所有内容也是困难的,故要做取舍。好在该书的各个章节相对独立且难度由浅入深,我们的做法是将相对容易的一般的入门性内容留在本科阶段,而将相对难的专门的较深入的内容并入研究生课程《算法及复杂性》或《计算复杂性》。除本校外,本人就曾多次应邀在兰州大学、湖南大学和浙江师范大学等院校为研究生讲授过这些内容。其实该书也适合希望增强自身程序设计能力和程序评判能力的广大应用计算技术的社会公众,特别是参加信息学奥林匹克竞赛和ACM程序设计竞赛的选手及其教练员。
  教学过程中我们发现该书具有以下特点:(1)选材与时俱进,具有实用性且能引起读者的兴趣。该书中研究的许多问题都是当前现实应用中的关键技术问题。(2)采用伪码描述算法,既简洁易懂又便于抓住本质,再配上丰富的插图来描述和解释算法的执行过程使得教学内容更加通俗,便于自学。(3)对算法正确性和复杂性的分析比较全面,既有严密的论证,又有直观的解释。(4)既有结论性知识的介绍,也有逐步导出结论的研究过程的展示。(5)丰富的练习题和思考题使得及时检验所学知识掌握情况和进一步拓展学习内容成为可能。
  同时,我们也注意到:学生们总是反映看英文版教材速度太慢,所以他们总是想方设法再找一本中译版来阅读。正是这样的背景,在第三版的《Introduction to Algorithms》出版后,我们应机械工业出版社编辑的邀请,启动了长久的翻译工程,先后参加翻译工作的老师有:国防科学技术大学的殷建平教授(翻译第1~3章)、中国科学技术大学的徐云教授(翻译第10~14章、第18~21章和第27章)、南开大学的王刚教授(翻译第4章和第15~17章)、南开大学的刘晓光教授(翻译第6~9章)、南开大学的苏明副研究员(翻译第5章和第28~30章)、上海交通大学的邹恒明教授(翻译第22~26章)、哈尔滨工业大学的王宏志副教授(翻译第31~35章和附录部分)。由于水平有限且工作量巨大,译文中一定存在许多不足,在此敬请各位同行专家学者和广大读者批评指正,欢迎大家将发现的错误或提出的意见与建议发送到邮箱。在整个工程即将完成之际,我们特别要感谢机械工业出版社的温莉芳老师和王春华老师,没有你们的信任、耐心和支持整个翻译工作不可能完成。
  殷建平
  2012年11月于长沙



信息时代基石:算法的探索与实践 在信息爆炸、技术飞速迭代的当下,我们身处一个由数据和算法驱动的时代。从智能手机的推荐系统到复杂的金融模型,从自动驾驶的导航到基因测序的分析,算法无处不在,默默地塑造着我们的生活,定义着未来的可能性。它们是解决问题、优化流程、洞察模式的强大工具,更是计算机科学领域的核心基石。本书旨在为读者揭示算法世界的奥秘,带领大家走进这个逻辑严谨、充满创造力的学科殿堂,理解其深层原理,掌握其实用技巧,并培养解决复杂计算问题的能力。 算法是什么?——从问题到解决方案的桥梁 简单来说,算法就是解决特定问题的一系列清晰、明确、有限的步骤。它不是一个具体的程序代码,而是一种抽象的思维方式和解决问题的蓝图。一个好的算法,如同精密的齿轮,能够高效、准确地将输入转化为期望的输出。想象一下,我们需要找到一系列数字中的最大值。一个直观的算法可能是:首先,将第一个数字视为当前最大值;然后,逐个遍历剩余的数字,如果遇到一个比当前最大值更大的数字,就更新当前最大值;最后,当遍历完所有数字后,当前最大值就是整个列表中的最大值。这虽然简单,却是一个完整的算法。 本书将从最基础的概念入手,系统地阐述算法的定义、特性以及设计的基本原则。我们将探讨如何准确地描述一个算法,如何分析其效率,以及如何选择最适合特定问题的算法。这不仅仅是理论上的探讨,更是为日后解决实际计算挑战打下坚实基础的关键一步。理解算法的本质,就如同掌握了一把解锁无数信息挑战的钥匙。 算法的分析:效率与可行性的衡量标准 在算法的世界里,效率至关重要。面对海量的数据和日益增长的计算需求,一个低效的算法可能会导致程序运行缓慢,甚至无法在合理的时间内得出结果。因此,学会分析算法的效率是必不可少的技能。本书将深入讲解算法分析的核心概念,包括时间复杂度和空间复杂度。 时间复杂度衡量的是算法运行所需的时间随输入规模增长的变化趋势,通常用大O符号(O notation)来表示。例如,O(n)表示算法的运行时间与输入规模n成线性关系;O(n^2)则表示运行时间与n的平方成正比。不同的时间复杂度,意味着算法在处理大规模数据时效率的巨大差异。我们将通过各种实例,学习如何计算和比较不同算法的时间复杂度,从而选择最优解决方案。 空间复杂度则衡量算法运行时所需的内存空间。在某些场景下,内存资源也是宝贵的,因此优化空间复杂度同样具有重要意义。本书将引导读者理解如何评估算法的空间消耗,并在时间和空间之间做出明智的权衡。掌握了这些分析工具,我们就能以一种科学、量化的方式来评估算法的优劣,确保我们设计的解决方案既正确又高效。 经典算法的宝库:解决各领域问题的利器 算法的世界广阔而精彩,其中涌现出无数经典的算法,它们如同历经时间考验的瑰宝,能够解决计算机科学中一系列核心问题。本书将带领读者系统地学习这些经典算法,并深入理解它们背后的数学原理和设计思想。 排序算法是计算机科学中最基础也最重要的算法之一。它们的目标是将一组无序的元素按照特定的顺序排列。我们将学习诸如冒泡排序、选择排序、插入排序等简单但直观的算法,理解它们的原理和局限性。更进一步,我们将探索更高效的算法,如快速排序、归并排序、堆排序等,它们在处理大规模数据集时展现出卓越的性能。理解这些排序算法的差异和适用场景,将为我们处理数据的整理和分析打下坚实基础。 查找算法是数据检索的核心。当我们需要在大量数据中快速找到特定信息时,查找算法就显得尤为重要。我们将学习简单的线性查找,以及更高效的二分查找,后者在有序数据集上能够以极快的速度定位目标。此外,我们还会接触到散列表(Hash Table)等更高级的数据结构和查找技术,它们能够实现近乎常数的平均查找时间。 图算法是处理网络、路径、连接等问题的强大工具。图是由节点(顶点)和边构成的数学结构,广泛应用于社交网络分析、交通导航、资源分配等领域。本书将深入探讨图的表示方法,以及一系列核心的图算法,包括: 深度优先搜索(DFS)和广度优先搜索(BFS):这两种遍历图的搜索策略是许多更复杂图算法的基础。DFS如同探险家,深入探索图的每个分支;BFS则如同水波扩散,一层一层地向外扩展。 最短路径算法:如Dijkstra算法和Floyd-Warshall算法,它们能够找到图中任意两个节点之间的最短路径,这在导航系统、网络路由等方面至关重要。 最小生成树算法:如Prim算法和Kruskal算法,它们能够找到连接图中所有顶点的成本最低的边的集合,这在网络设计、电力线路铺设等问题中有广泛应用。 动态规划是一种强大且通用的算法设计技术,适用于解决具有重叠子问题和最优子结构的问题。它通过将大问题分解成小问题,并存储和重用子问题的解,从而避免重复计算,达到高效求解的目的。我们将通过经典的例子,如斐波那契数列、背包问题、最长公共子序列等,来理解动态规划的思维方式和实现方法。 贪心算法是一种直观的算法设计策略,它在每一步选择局部最优解,希望最终能得到全局最优解。虽然贪心算法并非总是有效,但在许多问题中,它能够提供简单且高效的解决方案。我们将学习如何识别适合贪心算法的问题,并理解其局限性。 计算几何是算法领域中一个重要的分支,它研究如何利用算法来解决几何问题。我们将接触到计算几何的基本概念,如点、线段、多边形,以及相关的算法,如凸包的计算、线段相交的判断等,这些在计算机图形学、机器人学等领域有着广泛的应用。 其他重要的算法领域还包括字符串匹配、数论算法、概率算法等,本书也将对这些领域进行适当的介绍,为读者打开更广阔的视野。 算法设计与实现:理论与实践的结合 理解算法的原理固然重要,但将算法转化为实际可运行的代码,并解决真实世界的问题,则是理论转化为生产力的关键。本书不仅注重算法的理论讲解,更强调算法的设计与实现。我们将探讨如何将抽象的算法逻辑转化为结构清晰、易于理解和维护的程序代码。 在学习过程中,读者将有机会接触到各种编程语言的实现示例,理解如何根据算法的特性选择合适的数据结构,以及如何优化代码以获得更好的性能。我们将鼓励读者动手实践,通过解决一系列练习题和编程挑战,将所学知识融会贯通,真正掌握算法的设计和实现技巧。 算法的应用:赋能现代科技 算法早已不再是仅限于学术研究的抽象概念,而是驱动现代科技发展的核心动力。本书将通过丰富的实例,展示算法在各个领域的广泛应用,帮助读者深刻理解算法的价值和影响力。 人工智能与机器学习:推荐系统、图像识别、自然语言处理、自动驾驶等领域,都离不开复杂的算法支持。我们将探讨机器学习中的核心算法,如决策树、支持向量机、神经网络等,以及它们如何使机器具备学习和决策能力。 大数据分析:在海量数据中挖掘有价值的信息,需要高效的算法来处理和分析。我们将了解如何利用算法进行数据挖掘、模式识别、预测分析等,从而从数据中获得洞察。 网络与通信:互联网的畅通、数据的传输、信息的安全,都依赖于各种精密的算法。路由算法、加密算法、压缩算法等,共同构建了现代通信的基础。 科学计算与工程:从天气预报到药物研发,从金融建模到航空航天,科学计算和工程领域都离不开对复杂问题的算法求解。 通过这些应用案例,读者将能够更直观地感受到算法的力量,理解算法如何解决现实世界中的挑战,并激发他们在未来创新和发展的灵感。 为未来而准备:持续学习与探索 信息技术的发展日新月异,新的算法和技术层出不穷。本书所介绍的内容,是理解和掌握这些新知识的坚实基础。我们鼓励读者在掌握本书内容之后,继续保持对算法领域的好奇心和探索精神,不断学习新的算法和技术,紧跟时代发展的步伐。 算法不仅仅是计算机科学的工具,更是一种解决问题、进行逻辑推理的思维方式。掌握算法,就是掌握了一门通往更广阔知识领域和无限创新可能性的语言。希望本书能成为您探索算法世界的精彩起点,并为您的学术和职业生涯提供强大的支撑。

用户评价

评分

这本书刚拿到手的时候,就被它厚重的体积和封面上的“算法导论”几个字镇住了。我一直对计算机科学的底层原理非常感兴趣,尤其是在学习各种编程语言和框架的时候,总感觉缺少一些核心的理论支撑。很多时候,我们只是调用现成的库函数,或者照搬网上找到的代码片段,但对于这些“魔法”是如何实现的,却一知半解。这本书就像一本武功秘籍,我期待它能揭示那些隐藏在代码之下的深刻逻辑。我特别希望能通过它理解诸如排序、搜索、图算法等基础但至关重要的概念,并且能够掌握分析算法效率的方法,比如时间复杂度和空间复杂度,这样我才能更有效地优化自己的代码,写出更高效、更健壮的程序。另外,我对书中关于动态规划和贪心算法的章节也充满期待,这些听起来就很“高大上”的算法,希望能在这本书的指导下,变得触手可及,不再是只能仰望的学术名词。读完这本书,我希望能拥有“内功心法”,而不是仅仅停留在“招式”的学习上,真正做到知其然,也知其所以然。

评分

说实话,一开始拿起这本书,我感觉自己就像一个初次踏入迷宫的探险者,面对着密密麻麻的符号和公式,有点不知所措。我并不是计算机科学专业的科班出身,工作中的大部分时间都聚焦在实际的项目开发上,所以很多理论性的东西对我来说都有些陌生。但即便如此,我还是被这本书的严谨和系统所吸引。它不像某些网络教程那样浅尝辄止,而是深入浅出地讲解每一个算法的原理、推导过程以及应用场景。我尤其欣赏书中对不同算法进行详细的比较分析,比如在解决同一个问题时,为什么有的算法性能更好,背后的数学原理是什么。虽然有些章节确实需要花费不少时间和精力去消化,反复阅读才能有所领悟,但我相信,这种扎实的理论基础,对于提升我的编程思维和解决复杂问题的能力是至关重要的。我希望通过这本书,能真正理解“为什么”要这么做,而不是仅仅停留在“怎么做”的层面,从而在未来的职业生涯中,能够应对更多挑战,设计出更具创新性的解决方案。

评分

我之前接触过一些关于数据结构和算法的书籍,但总觉得它们要么过于碎片化,要么就是过于理论化,脱离实际应用。而这本《算法导论》给我的感觉截然不同。它的结构非常清晰,从最基础的概念讲起,循序渐进,难度逐渐提升。我特别喜欢书中对每个算法都给出了详细的伪代码和图示,这对于我这种视觉型学习者来说,简直是福音。很多抽象的概念,通过图示和伪代码的结合,立刻变得直观易懂。我尤其期待书中关于图算法的部分,比如最短路径、最小生成树等,在实际的导航系统、网络规划等方面都有广泛应用。能够深入理解这些经典算法,对我来说是职业生涯的一个重要里程碑。这本书就像一个经验丰富的老师,耐心细致地指导我学习算法的精髓,让我感觉不再是孤军奋战,而是有了一个强大的后盾。希望读完这本书,我能够自信地解决各种复杂的算法问题,并在实际工作中游刃有余。

评分

坦白讲,我对这本书的期望很高,因为身边很多资深的程序员都推荐过。我之前在工作中遇到过不少性能瓶颈,往往是因为对算法的理解不够深入,导致选择了效率不高的解决方案。所以,我希望通过这本《算法导论》,能够系统地学习各种经典算法,理解它们的优缺点,以及在什么场景下应用最合适。我尤其对书中的“计算理论”和“高级算法”部分感到好奇,这些章节听起来就充满了挑战,但也蕴藏着解决更复杂问题的钥匙。我希望能够通过这本书,建立起一个完善的算法知识体系,能够更科学地分析和设计算法,从而在未来的工作中,能够写出性能更优、更具扩展性的代码。这本书不仅是一本技术手册,更像是一本思想的启迪者,我期待它能帮助我跳出思维定势,用更宏观、更本质的视角来看待编程问题。

评分

这本书的厚度足以说明其内容的深度和广度。作为一名正在努力提升自己技术实力的开发者,我深知算法是计算机科学的基石,是解决一切问题的根本。我一直渴望能够有一本权威的著作,系统地梳理算法的知识脉络,让我能够从根源上理解计算机的运行机制。这本书恰恰满足了我的需求。我非常期待书中对各种算法的时间和空间复杂度进行详尽的分析,这对我来说是至关重要的,能够帮助我更好地评估和优化代码的性能。同时,我也对书中介绍的一些高级算法技巧,比如近似算法、随机化算法等,充满了浓厚的兴趣,相信它们能为我打开新的思路,解决一些目前看来棘手的难题。我希望通过精读这本书,能够真正掌握算法的设计思想和分析方法,从而在面对实际问题时,能够信手拈来,给出最优的解决方案,成为一名更优秀的工程师。

评分

看知乎上推荐的,准备学习下C++相关的算法,书的质量也很好,物流也很快

评分

很喜欢这本书,非常好

评分

讲了很多底层的实现,很原理的内容,缺点是有些地方公式推导较多,有些表述难以理解,读起来非常难受,需要反复揣摩,不知道是翻译不地道还是思维模式不同,总之要读懂还是需要花大力气的

评分

英文版:Create a class with protected data. Create a second class in the same file with a method that manipulates the protected data in the first class.

评分

这本书是java数据结构与算法方面的三宝之一。除了这三本其他的已经没有意义了。

评分

十分喜欢,很久之前就想买了。

评分

618活动买的,比较便宜,崭新的。好久没看实体书了

评分

还不错,很好,快递很快的。

评分

两本大部头,质量很好

相关图书

本站所有内容均为互联网搜索引擎提供的公开搜索信息,本站不存储任何数据与内容,任何内容与数据均与本站无关,如有需要请联系相关搜索引擎包括但不限于百度google,bing,sogou 等,本站所有链接都为正版商品购买链接。

© 2025 windowsfront.com All Rights Reserved. 静流书站 版权所有