Introduction to Algorithms - Third Edition
Part I. Foundations
Chapter 1. The Role of Algorithms in Computing
1.1 算法(Algorithms)
算法是一系列定义明确的计算步骤,将输入(input)转化为输出(output)。
我们可以视算法为工具,以解决特定的计算问题(computational problem)。
如果对于每个实例,使用正确的输出结束算法,那么,称该算法是正确的(correct)。
We say that a correct algorithm solves the given computational problem.
算法可以解决什么类型的问题
算法的实际应用普遍存在,下面是算法应用的一些例子:
- 人类基因组计划(the Human Genome Project):信息存储,数据分析等。
- 互联网(the Internet):找出良好的数据传输路线(Chapter 24);使用搜索引擎快速查找特定信息所在的页面(Chapter 11, Chapter 32)等。
- 电子商务(electronic commerce):公共密钥密码术和数字签名(Chapter 31)等。
- 制造业及其他商业企业经常需要以最有利的方式分配稀缺资源:线性编程(Chapter 29)等。
数据结构
数据结构(data structure)是一种存储和组织数据的方式,以便于访问和修改。
技术
本书将教您算法设计与分析的技巧,以便您可以自己开发算法,证明它们给出正确的答案,并了解其效率。
难题
有些问题尚无有效的解决方案。
例如,NP完全问题(NP-complete)(Chapter 34)。
旅行商问题(TSP: traveling-salesman problem)属于NP完全问题。
NP完全问题的“近似算法”(Chapter 35)。
并行机制(Parallelism)
多核计算机是一种“并行计算机”。为了从多核计算机中获得最佳性能,我们需要考虑设计并行性的算法。
第27章介绍了利用多核的“多线程”算法模型。从理论的角度来看,该模型具有优势,并且它构成了几种成功的计算机程序(包括冠军象棋程序)的基础。
练习
1.1-1 给出现实中需要排序的例子,或需要计算凸包(convex hull)的例子。
解:考试成绩排序。人际关系网络的最小化搜索,通过人际关系可以合理推断某人的身份职位等个人特征。
1.1-2 在现实中,除了速度,还可以使用什么作为效率的衡量标准?
解:程序运行时所需要的存储空间。
1.1-3 选择一种你以前见过的数据结构,详述它的优势与局限性。
解:数组优势:支持快速访问元素;遍历数组方便。
数组局限性:数组大小固定,不能扩容;除了数组尾部元素之外,其他元素的删除和添加操作较慢。
1.1-4 上面提过的的最短路径问题(shortest-path)与旅行商(traveling-salesman)问题有何相似之处?有何不同之处?
解:最短路径问题:在图中,计算一个节点到其他所有节点的最短路径。
旅行商问题:给定一系列城市和每对城市之间的距离,求解访问每一座城市一次并回到起始城市的最短回路。是组合优化中的一个NP困难问题。
相似:两者均涉及计算图中两点间的最短距离。
不同:旅行商问题中,每个节点必须要经过至少一次,可以视图中任意两点均可相连;目前只有近似算法。最短路径问题中,图中相连的节点已经确定,计算两点间的最短路径时,只须选择出所有连通两点的路径中距离最短的路径,不需要经过所有节点;有最优算法。
1.1-5 提出一个只有最佳解决方案才能解决的现实问题。再提出一个有“近似”最佳的解决方案就可行的现实问题。
解:最佳:路由表的更新。每个路由器都维护有自己的网路图,以便计算自身与其他节点之间的最短路径来更新其路由表。路由器的主要工作就是为经过路由器的每个数据包寻找一条最佳的传输路径,并将该数据有效地传送到目的站点。所以,选择最佳路径的策略是路由器的关键所在。
近似最佳:印制电路板转孔。在一块电路板上打成百上千个孔,转头在这些孔之间移动,相当于对所有的孔进行一次巡游。把这个问题转化为TSP,孔相当于城市.孔到孔之间的移动时间就是距离。
1.2 算法作为一项技术(Algorithms as a technology)
计算时间和内存空间是有限的资源。高效的时间或空间算法可以帮助你明智地使用这些资源。
效率
为解决同一问题而设计的不同算法,它们的效率通常有很大差异。这些差异可能比由于硬件和软件引起的差异重要的多。
算法与其他技术
我们应该将算法视为一项技术(technology),如同计算机硬件一样。总体系统性能取决于高效算法的选择和高速硬件的选择,这两者同样重要。
练习
1.2-1 给出一个在应用程序级别需要算法内容的应用程序示例,并讨论所涉及算法的功能。
解:图像处理软件。低分辨率的像素图转化为高质量的向量图的算法;自动合成照片的算法;自动对容貌进行"美化"的算法等。
1.2-2 假设我们在同一台机器上比较插入排序和归并排序的实现。对于大小为
n
n
n 的输入,插入排序运行
8
n
2
8n^2
8n2 步,归并排序运行
64
lg
n
64 \lg n
64lgn 步。
n
n
n 值为多少时,插入排序优于归并排序?
解:当
n
⩽
43
n \leqslant 43
n⩽43 时,
8
n
2
<
64
log
2
n
8n^{2} < 64 \log_{2} n
8n2<64log2n 。
1.2-3 在同一台机器上,一个算法的运行时间是
100
n
2
100n^2
100n2,另一个算法的运行时间是
2
n
2^n
2n,当前者比后者更快时,
n
n
n 的最小值是多少?
解:当
n
⩽
14
n \leqslant 14
n⩽14 时,
100
n
2
>
2
n
100n^2 > 2^n
100n2>2n;当
n
=
15
n=15
n=15 时,
100
n
2
<
2
n
100n^2 < 2^n
100n2<2n。所以,
n
n
n的最小值是 15。
问题
1-1 运行时间的比较
对于下表的每个函数
f
(
n
)
f(n)
f(n) 和时间
t
t
t,假设算法解决问题需要
f
(
n
)
f(n)
f(n) 微秒,要求在时间
t
t
t 内解决问题,求
n
n
n 的最大值。
1 second | 1 minute | 1 hour | 1 day | 1 month | 1 year | 1 century | |
---|---|---|---|---|---|---|---|
lg n \lg n lgn | 21000000 | ||||||
n \sqrt n n | 1012 | 3.6 × \times × 1015 | |||||
n n n | 106 | 6 × \times × 107 | 3.6 × \times × 109 | ||||
n lg n n\lg n nlgn | |||||||
n 2 n^2 n2 | 1000 | 7745 | 60000 | ||||
n 3 n^3 n3 | 100 | ||||||
2 n 2^n 2n | 19 | 25 | 31 | ||||
n ! n! n! | 9 | 11 | 12 |
解: 1 s = 1 0 6 μ s 1s = 10^6 \mu s 1s=106μs。当 f ( n ) ⩽ t f(n) \leqslant t f(n)⩽t 时,求 n n n 的最大值。
相关网站:http://mitpress.mit.edu/algorithms/
学习笔记目录:【算法导论】目录