概述
算法
若干指令组成的有穷序列。
- 输入:零或多个外部输入
- 输出:至少一个输出
- 确定性:每条指令无歧义
- 有限性:每条指令执行次数有限,总运行时间有限
复杂性
分时间和空间复杂性。
计算时间复杂度的时候,通过计算其核心语句的执行次数,导出其关于问题规模N的复杂度计量T(N)。
而当N→∞,T(N)→∞。此时通过求T(N)的渐进式来简化复杂度计量。引入渐进意义下记号:O、Ω、θ和o。
O(上界)
设f(N)和g(N)为正数集上的正函数。存在正的常数C和自然数N0,使N>=N0时,总有f(N)<=g(N),则称g(N)是f(N)在N充分大时的一个上界,记为f(N)=O(g(N))
其余渐进符号类推。
递归与分治法
递归
直接或间接调用自身的算法。
分治法
将规模为n的问题分为k个规模较小的子问题。子问题和原问题相同且相互独立。递归地解决子问题并将子问题的解合并为原问题的解。
一般而言,将问题分为大小相近的子问题是最有效率的。通常将问题一分为二。
从设计模式可以看出,分治法一般用递归实现。所以分治法的效率可以通过递归表达式进行分析。则有:
其中问题规模最小为1,其时解所耗费的时间为常数单位。规模大于1时,将问题分解为k个规模为n/m的子问题。将这k个子问题的解合并耗费的时间为f(n)。则展开上式可得: