本文共 1879 字,大约阅读时间需要 6 分钟。
本节书摘来自异步社区《Python算法教程》一书中的第1章,第1.4节,作者[挪威]Magnus Lie Hetland(赫特兰), 凌杰 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.4 本书主要内容
本书大体结构如下。
- 第1章 引言:这章您目前已经读了大半了,主要是对本书内容做一个预览。
- 第2章 基础知识:这章主要涉及一些基本的概念与术语,以及一些基本的数学运算。除此之外,我们还会介绍一些比以往任何时候都要模糊的计算公式,并试图用它们来获取正确的结果。这就是所谓的渐近记法。
- 第3章 计数初步:这章会涉及更多数学运算——但这些运算真的很有趣,我保证!主要是一些用于算法运行时间分析的基本组合运算,以及对递归与递推关系的概念性介绍。
- 第4章 归纳、递归及归简:标题中的这三个词至关重要,三者是密切相关的。这章主要介绍的是归纳(Induction)与递归(Recursion),它们其实是互为镜像的,并且都对新算法设计以及其正确性证明有着重要作用。当然我们也会简短地介绍一些与归简(Reduction)有关的内容,这也是一种几乎所有现行算法中都通用的设计思想。
- 第5章 遍历:算法学中的万能钥匙:遍历(Traversal)也可以通过归纳和递归的角度来理解,但从许多方面来说,它都是一项更为具体的特殊技术。本书所介绍的许多算法实际上都属于简单的扩展性遍历。因此掌握遍历将是我们实现飞跃的第一步。
- 第6章 分解、合并、解决:当目标问题可以被分解成多个彼此独立的子问题时,我们往往可以对这些子问题使用递归算法,这既能获得正确的结果,又能提高我们的算法效率。当然,这种设计思路可以有若干种应用,虽然并非个个都是那么显而易见的,但它是一种非常有价值的思想工具。
- 第7章 贪心有理?请证明贪心算法(Greedy algorithms)的设计通常很容易。只要人们坚持根据问题的最佳情况来设计整体方案,而不是去面面俱到,得到的就是所谓的贪心算法。简而言之,我们就是要设计一种即插即用式的解决方案。这种算法不仅设计容易,通常也很有效率。但问题在于,我们很难证明它们的正确性(而且大多其实都不正确)。在这一章,我们将会为您介绍一些这方面的知名案例,以及用于证明其正确性的常用方法。
- 第8章 复杂依赖及其记忆体化:这章所要介绍的设计方法(过去也有叫作设计问题的),业界对它的称呼有些混乱,我们通常称之为动态规划(dynamic programming)。尽管这是一种非常难以掌握的算法设计技术,但它也催生了一些算法设计领域中最为经久不衰的论点与优雅的解决方案。
- 第9章 Dijkstra1 及其朋友们从A到B的旅程:在经过了前三章的设计方法讨论之后,我们将焦点转向一个与主机应用相关的特殊问题,即网络或图结构中的最短路径问题。该问题有着许多种变化,而针对这些变化,我们也都有相应的(漂亮)算法。
- 第10章 匹配、切割及流量:我们如何进行匹配工作呢?诸如如何找出学校中整体满意度最高的大学生、如何找出线上社区中最可信的成员、我们如何查看某个公路网的总容纳量等问题,我们都可以通过设计一小类互相紧密联系的算法,以及各种流量最大化技术来解决。这一切我们都会在这一章中做详细介绍。
- 第11章 困难问题及其(有限)稀释:正如这篇引言开头所暗示的那样,对于某些问题,我们可能确实找不出有效的解决方法,甚至在很长一段时间内都无法解决它们——也许是永远解决不了。在这一章,我们将学习一种全新的处理方式:我们将会选择一些可靠的归简工具,这些工具的作用不是解决问题,而是凸显相关问题的难度。除此之外,我们还将与您讨论究竟应该将问题稀释到何种程度(这必须严格把关),才能使它们看起来更容易解决一些。
- 附录A 猛踩油门!令Python加速:本书主要聚焦于程序的渐近效率问题——该程序相对于问题大小的弹性空间。但对于某些具体情况而言,我们的讨论依然还不够充足。该附录将介绍一些用于提升Python程序速度的工具,有时它们确实能带来速度的大幅度增长(甚至是几百倍的增长)。
- 附录B 一些著名问题与算法:该附录主要是为本书所讨论的算法设计问题及一些具体算法做一个概述,我们在其中加入了一些额外信息,以帮助读者在面对手头相关问题时做出正确的算法选择。
- 附录C 图论基础:无论是在描述真实世界中的系统时,还是在描述各种算法的工作方式时,图都是一种非常有用的数据结构。该附录将对与图相关的基本概念与术语做一个简单概述,以防您之前没有处理过与图相关的问题。
- 附录D 习题提示:其主要内容如标题所言。
转载地址:http://qdscm.baihongyu.com/