《算法导论(原书第3版)》一导读

简介: 本书的设计目标是全面、适用于多种用途。它可用于若干课程,从本科生的数据结构课程到研究生的算法课程。由于书中给出的内容比较多,只讲一学期一般讲不完,因此,教师们应该将本书看成是一种“缓存区”或“瑞典式自助餐”,从中挑选出能最好地支持自己希望教授的课程的内容。

bfde320a565482f569a1b563163135a554077df3

前 言

在计算机出现之前,就有了算法。现在有了计算机,就需要更多的算法,算法是计算的核心。

本书提供了对当代计算机算法研究的一个全面、综合的介绍。书中给出了多个算法,并对它们进行了较为深入的分析,使得这些算法的设计和分析易于被各个层次的读者所理解。我们力求在不牺牲分析的深度和数学严密性的前提下,给出深入浅出的说明。

书中每一章都给出了一个算法、一种算法设计技术、一个应用领域或一个相关的主题。算法是用英语和一种“伪代码”来描述的,任何有一点程序设计经验的人都能看得懂。书中给出了244幅图,说明各个算法的工作过程。我们强调将算法的效率作为一种设计标准,对书中的所有算法,都给出了关于其运行时间的详细分析。

本书主要供本科生和研究生的算法或数据结构课程使用。因为书中讨论了算法设计中的工程问题及其数学性质,所以,本书也可以供专业技术人员自学之用。

本书是第3版。在这个版本里,我们对全书进行了更新,包括新增了若干章、修订了伪代码等。

致使用本书的教师

本书的设计目标是全面、适用于多种用途。它可用于若干课程,从本科生的数据结构课程到研究生的算法课程。由于书中给出的内容比较多,只讲一学期一般讲不完,因此,教师们应该将本书看成是一种“缓存区”或“瑞典式自助餐”,从中挑选出能最好地支持自己希望教授的课程的内容。

教师们会发现,要围绕自己所需的各个章节来组织课程是比较容易的。书中的各章都是相对独立的,因此,你不必担心意想不到的或不必要的各章之间的依赖关系。每一章都是以节为单位,内容由易到难。如果将本书用于本科生的课程,可以选用每一章的前面几节内容;用于研究生的课程中,则可以完整地讲授每一章。

全书包含957道练习和158道思考题。每一节结束时给出练习,每一章结束时给出思考题。练习一般比较短,用于检查学生对书中内容的基本掌握情况。有一些是简单的自查性练习,有一些则要更充实,可以作为家庭作业布置给学生。每一章后的思考题都是一些叙述较为详细的实例研究,它们常常会介绍一些新的知识。一般来说,这些思考题都会包含几个小问题,引导学生逐步得到问题的解。

在那些不太适合本科生、更适合研究生的章节和练习前面,都加上了星号。带星号的章节也不一定就比不带星号的更难,但可能要求了解更多的数学知识。类似地,带星号的练习可能要求有更好的数学背景或创造力。

致使用本书的学生

希望本教材能为学生提供关于算法这一领域的有趣介绍。我们力求使书中给出的每一个算法都易于理解和有趣。为了在学生遇到不熟悉或比较困难的算法时提供帮助,我们逐个步骤地描述每一个算法。此外,为了便于大家理解书中对算法的分析,对于其中所需的数学知识,我们给出了详细的解释。如果对某一主题已经有所了解,会发现根据书中各章的编排顺序,可以跳过一些介绍性的小节,直接阅读更高级的内容。

本书是一本大部头著作,学生所修的课程可能只讲授其中的一部分。我们试图使它能成为一本现在对学生有用的教材,并在其将来的职业生涯中,也能成为一本案头的数学参考书或工程实践手册。

目 录

第一部分 基础知识

第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 向下取整和向上取整
 思考题
 本章注记

相关文章
|
6月前
|
算法
数据结构与算法之经典算法《二分查找》
数据结构与算法之经典算法《二分查找》
22 0
|
8月前
|
算法
算法导论(第三版)具体算法解析与理解
算法导论(第三版)具体算法解析与理解
|
12月前
|
算法 索引
数据结构与算法(六) 贪心算法
数据结构与算法(六) 贪心算法
76 0
|
算法
【数据结构与算法】之动态规划经典问题
【数据结构与算法】之动态规划经典问题
119 0
【数据结构与算法】之动态规划经典问题
|
算法
数据结构与算法之八皇后问题
八皇后问题代码实现 package com.pionner.recursion; public class Queen8 { int max = 8; int[] array = new int[max]; static int i = 0; public...
753 0
|
算法
算法导论——贪心算法
贪心算法(greedy algorithm)是指,在每一步都做出当时看起来最佳的选择,也就是局部最优的选择,期望这样的选择能够导向全局最优解。所以并不是所有的问题都能得到全局最优解。          典型的例子如分数背包问题:背包容量为50kg,有三个商品分别是重60元/10kg、100元/20kg、120元/30kg,商品可以分割,如何选取商品使背包价值最大。
1449 0
|
移动开发 算法 BI
算法导论——动态规划
  动态规划指的是一个问题可以拆分成多个小的最优子问题,并且这些子问题具有重叠,典型的如斐波那契数列:f(2)=f(1)+f(0),f(3)=f(2)+f(1),f(4)=f(3)+f(2),若使用简单的递归算法求f(4),则f(2)会被计算两次,当计算f(n)时需要计算f(n-1)和f(n-2)而f(n-1)又要计算记一次f(n-2),如此往复时间复杂度为n的指数级别,导致算法效率低下。
1414 0
|
算法 Python 机器学习/深度学习
|
算法 人工智能
算法导论第十五章 动态规划
写在前面:从本章开始,算法导论章节进入第四部分:高级设计和分析技术。在读的过程中,可以明显感觉到本章内容跟之前章节的内容要复杂得多。这么来说,之前章节的内容更多的是在教我们使用一些在算法设计过程中常用的工具(即数据结构),而本章以后的内容是在述说更上层的方法论(如何根据不同的问题精确地设计不同的算法)。
1336 0
|
算法
算法导论第十二章 二叉搜索树
一、二叉搜索树概览   二叉搜索树(又名二叉查找树、二叉排序树)是一种可提供良好搜寻效率的树形结构,支持动态集合操作,所谓动态集合操作,就是Search、Maximum、Minimum、Insert、Delete等操作,二叉搜索树可以保证这些操作在对数时间内完成。
770 0

热门文章

最新文章