算法设计与分析
学什么?
- 什么是算法
- 如何设计算法
- 如何判断算法的优劣
基本的算法设计策略
分治法
贪心方法
动态规划
回溯法
分支-限界法
现实世界的两个问题
问题能解决吗?(可计算性)
问题解决的好吗?(计算复杂性)
什么是算法
算法是解决已确定类问题的任意一种特殊的方法。
- 数值计算方法:求解数值问题、插值计算、数值积分等。
- 非数值计算方法:求解非数值问题,主要进行判断比较。
算法的非形式描述:算法就是一组有穷的规则,它规定了解决某一特定类型问题的一系列问题。(这是knuth给出的概念)
算法的五个重要特性
- 确定性:每一种运算必须要有确切定义,无二义性
例:(1)5/0;(2)6或7与x相加。 - 能行性:运算都是基本运算,原理上能由人用纸和笔在有限时间完成。
- 输入:有0个或多个输入
在算法开始之前,从特定的对象集合中取值。 - 输出:一个或多个输出。
这些输出和输入有特定关系。 - 有穷性:在执行了有穷步运算后终止。
仅仅有穷还不够,还要在现代计算机上有效才行。(非常有限)
计算过程与算法的区别
计算过程可以不满足算法的性质-有穷性。
程序=算法+数据结构(By Niklaus Wirth)