time complexity
1.三种分析方式
最坏情况分析 Worst-Case Analysis
- 算法解决规模为n的问题所需的最长时间。
- 这给了一个算法的时间复杂度的上界,一般都使用最坏情况分析。
最好情况分析 Best-Case Analysis
- 算法解决规模为n的问题所需的最短时间。
平均情况分析 Average-Case Analysis
- 算法解决规模为n的问题所需的平均时间。
- 有时,很难找到算法的平均情况行为。
2.基本分析方法
赋值:O(1)
循环:O(n)
3.函数的种类
常数 | Constant | 5 |
对数 | Logarithmic | 5 log n |
多对数 | Poly Logarithmic | (log n)^5 |
多项式 | Polynomial | n^5 |
指数 | Exponential | 2^5n |
阶乘 | Factorial | n! |
函数增长速率
4.增长的渐近阶
4.1 渐进上界:big-oh
如果存在常数c>0和n0>=0,使对于所有n>n0,我们有T(n)<=c·f(n),则T(n) =O(f(n))
O(f(n)): 一种增长速度小于等于f(n)的T(n)函数
T ( n ) = 32 n 2 + 17 n + 32. T(n) = 32n^2 + 17n + 32. T(n)=32n2+17n+32.
- T(n) is O(n^2) and O(n^3).
- T(n) is not O(n).
4.2 渐进下界:big-omege
如果存在常数c>0和n0>=0,使对于所有n>n0,我们有T(n)>=c·f(n),则T(n)=W(f(n))
W(f(n)): 一种增长速度大于等于f(n)的T(n)函数
T ( n ) = 32 n 2 + 17 n + 32. T(n) = 32n^2 + 17n + 32. T(n)=32n2+17n+32.
- T(n) is Ω(n^2) and Ω(n).
- T(n) is not Ω(n^3)
4.3 渐进紧确界:big-theta
T(n) is Θ(f(n)) if T(n) is both O(f(n)) and Ω(f(n)).
Q(f(n)): 一种增长速度等于f(n)的T(n)函数
T ( n ) = 32 n 2 + 17 n + 32. T(n) = 32n^2 + 17n + 32. T(n)=32n2+17n+32.
- T(n) is O(n^2) and Ω(n^2), so it is Θ(n^2) .
- T(n) is not Θ(n) or Θ(n^3).
4.4 性质
传递性Transitivity
- 若f = O(g) 且 g = O(h) 则 f = O(h).
- 若f = W(g) 且 g = W(h) 则 f = W(h).
- 若f = Q(g) 且 g = Q(h) 则 f = Q(h).
可加性Additivity
- 若 f = O(h) 且 g = O(h) 则 f + g = O(h).
- 若 f = W(h) 且 g = W(h) 则 f + g = W(h).
- 若 f = Q(h) 且 g = O(h) 则 f + g = Q(h).
5.一些常见函数的渐进界
5.1 常数时间 Constant time: O(1)
运行时间并不依赖于输入的大小。
- 赋值;
- 比较(=,<,>)
- 布尔运算(and,or)
- 数学基本运算(+、-、*、/)
5.2 线性时间 Linear time: O(n)
运行时间最多是一个常数乘以输入的大小。
›计算最大值。计算n个数a1,…,an的最大值。
5.3 对数时间 O(nlogn) time
对每个b>1和每个x>0,我们都有logbn=O(n^x)
出现在分治算法中。
;排序。归并排序和堆排序是执行O(n log n)比较的排序算法。
›最大空白区间。给定文件副本到达服务器的n个时间戳x1,…,xn,当没有文件副本到达服务器的最大时间间隔是什么?
›O(nlogn)解决方案。按顺序扫描排序列表,确定最大差距连续时间邮票。
5.4 二次时间 Quadratic time:O(n2)
枚举所有对元素。
›最近点对。给定平面上n个点的列表(x1, y1),…,(xn, yn),找出最接近的一对。
; O (n2)解决方案。尝试所有的点对。
5.5 立方时间 Cubic time:O(n^3)
枚举所有元素的三元组。
剥离。给定n个集合S1,…,Sn每个集合都是1,2,…,n的子集,它们中是否有不相交的对?
O (n3)解决方案。对于每对集合,确定它们是否不相交。
5.6 多项式时间 Polynomial time :O(n^k)
令f是一个d阶多项式,其中系数ad是正数,那么f=O(n^d)
大小为k的独立集。给定一个图,是否有k个节点,使得没有两条边连接在一起?
O (n^k)的解决方案。枚举k个节点的所有子集。
5.7 指数时间Exponential time
对每个r>1和每个d>0,有nd=O(rn)
独立集。给定一个图,独立集的最大大小是多少?
›O(n^2 2^n)溶液。列举所有子集。