1.1 算法
什么是算法
若对每个输入实例,算法都以正确的输出停机,则称该算法是正确的,并称正确的算法解决了给定的计算问题。
不正确的算法对某些输入实例可能根本不停机。
扩展参考:图灵停机问题(P616)
问题描述:判断一个程序是否会在有限时间内结束运行。
这个答案是否定的,这里涉及逻辑数学中可计算性理论。
参考教材:
《离散数学及其应用 第8版》 第13章 计算模型
《计算机程序的构造和解释 第2版》 第4章 元语言抽象
算法解决哪些问题:
- 互联网上的网站能够管理和处理海量数据
- 电子商务中公钥密码和数字签名,以数值算法和数论为基础
- 最短路径问题
- 最长公共子序列问题(LCS),用到动态规划(DP)
- 机械设计中部件组成,涉及拓扑排序
- 给定平面上n个点,求包含这些点的最小凸多边形(MCP)
- 数据压缩、大多项式与整数相乘,涉及离散傅里叶变换,相关有效的算法——快速傅里叶变换
难题:NP完全问题
NP完全问题的3个特点:
-
不曾找到一个NP完全问题的有效算法,没有人能证明NP完全问题确实不存在有效算法;
-
NP完全问题具有一个非凡的性质:如果任何一个NP完全问题存在有效算法,那么所有NP完全问题都会存在有效算法;
即“一个有解,个个有解”
-
有几个NP完全问题类似于(但又不完全同于)一些有些已知有效算法的问题。
需要采用近似算法解决问题
计算机科学家迷恋于如何通过对问题陈述的一个小小的改变来很大地改变其已知最佳算法的效率。
计算并行性
计算并行性提出的原因:
芯片功率密度随时钟速度超线性增加,一旦时钟速度变得足够快,芯片将有熔化的危险。
CPU不能无限加速
解决方案:
芯片被设计成包含不止一个而是几个处理的核。故设计算法时必须考虑并行性。
硬件上多核并行,软件上多线程并行。线程概念的提出就是为了在软件层面上解决计算并行性问题
1.2 作为一种技术的算法
算法是当代计算机中使用的大多数技术的核心。
是否具有算法知识与技术的坚实基础是区分真正熟练的程序员和初学者的一个特征。
Techniques for controlling the complexity of these large systems. In some sense, that’s really what computer science is about.
–Harold Abelson (SICP的作者)