2. 算法基础
本章介绍了一个证明算法正确性的方法——循环不变式,对算法运行时间的简单分析,以及分治法。
循环不变式
类似于数学归纳法的一种证明算法正确性的方法。
需要证明以下三步:
- 初始化
循环的第一次迭代前,它为真。 - 保持
如果循环的某次迭代之前它为真,那么下次迭代之前它仍为真。 - 终止
再循环终止时,不变式为我们提供一个有用的性质,该性质有助于证明算法是正确的。
分治法
将原问题分解为几个规模较小但类似于原问题的子问题,递归求解这些子问题,然后合并这些子问题的解来建立原问题的解。
每层递归时,都有如下三个步骤:
- 分解
将原问题分解为几个规模较小但类似于原问题的子问题 - 解决
递归求解各个子问题,当子问题规模够小可以直接求解时,则直接求解 - 合并
合并这些子问题的解来建立原问题的解
涉及算法
点击查看实现
习题答案
思考题
1. 算法在计算中的作用
算法应用广泛,包括解决一些问题,以及让解决一个问题更快速,更省空间。硬件(CPU,内存)总是有限的,所以算法是非常有必要的。不论是当今流行的互联网还是人工智能都和算法息息相关。
算法解决哪些问题
- 基因工程
DNA中有十万个基因,30亿个化学基对,数据量很大
- 互联网
管理和处理海量数据(路由,搜索引擎)
- 电子商务
加密(公钥密码和数字签名)
- 资源分配
最大利益(线性规划)
- 交通
导航(最短路径)
- 基因匹配
最长公共子序列
- 依据部件库的机械设计
拓扑排序
- 凸壳
- …
难题
NP 完全问题
- 迄今找不到一个有效算法,但是也没人能证明不存在有效算法
- 如果任何一个NP 完全问题存在有效算法,那么所有NP 完全问题都存在有效算法
- 有几个NP 完全问题类似于一些已知有效算法的问题
本书内容
- 算法
- 数据结构
- 算法分析/算法设计