算法分析 第二章复习
文章目录
计算时间的渐进表示(时间复杂度)
一、 O \Omicron O表示法
1. O \Omicron O 的定义:
如果存在两个正常数 c c c和 n 0 n_0 n0,对于所有的 n n n≥ n 0 n_0 n0,有 ∣ f ( n ) ∣ ≤ c ∣ g ( n ) ∣ | f(n) |≤ c| g(n) | ∣f(n)∣≤c∣g(n)∣,则记做 f ( n ) = O ( g ( n ) ) f(n) =O(g(n) ) f(n)=O(g(n)),称 g ( n ) g(n) g(n)是计算时间 f ( n ) f(n) f(n)的一个渐近上界。
2. O \Omicron O 的证明:
证明存在正常数 c c c和 n 0 n_0 n0,对于所有的 n ≥ n 0 n≥ n_0 n≥n0,有 ∣ f ( n ) ∣ ≤ c ∣ g ( n ) ∣ | f(n) |≤c | g(n) | ∣f(n)∣≤c∣g(n)∣。
3. O \Omicron O的意义:
- 说明 g ( n ) g(n) g(n)是 f ( n ) f(n) f(n)的渐近上界
- 说明 f ( n ) f(n) f(n)的时间复杂度不高于 g ( n ) g(n) g(n)
- 即便是最坏情况下, f ( n ) f(n) f(n)的时间复杂度也不会高于 g ( n ) g(n) g(n)
4.常见的时间复杂度
多项式时间算法:
O ( 1 ) < O ( l o g n ) < O ( n ) < O ( n l o g n ) < O ( n 2 ) < O ( n 3 ) O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3) O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)
指数时间算法:
O ( 2 n ) < O ( n ! ) < O ( n n ) O(2^n)<O(n!)<O(n^n) O(2n)<O(n!)<O(nn)
二、 Ω \Omega Ω表示法
1. Ω \Omega Ω的定义:
如果存在两个正常数 c c c和 n 0 n_0 n0,对于所有的 n ≧ n 0 n \geqq n_0 n≧n0,有 ∣ f ( n ) ∣ ≧ c ∣ g ( n ) ∣ | f(n) | \geqq c | g(n) | ∣f(n)∣≧c∣g(n)∣,则记做 f ( n ) = Ω ( g ( n ) ) f(n) = \Omega(g(n) ) f(n)=Ω(g(n)),称 g ( n ) g(n) g(n)为 f ( n ) f(n) f(n)的渐近下界。
2. Ω \Omega Ω的证明:
存在正常数 c c c和 n 0 n_0 n0,对于所有的 n ≥ n 0 n≥ n0 n≥n0,有 ∣ f ( n ) ∣ ≧ c ∣ g ( n ) ∣ | f(n) | \geqq c | g(n) | ∣f(n)∣≧c∣g(n)∣
3. Ω \Omega Ω的意义:
- 说明 g ( n ) g(n) g(n)是 f ( n ) f(n) f(n)的渐近下界
- 说明 f ( n ) f(n) f(n)的时间复杂度不低于 g ( n ) g(n) g(n)
- 即便是最好情况下, f ( n ) f(n) f(n)的时间复杂度也不会低于 g ( n ) g(n) g(n)
三、 Θ \Theta Θ表示法
1. Θ \Theta Θ的定义:
如果存在正常数 c 1 c_1 c1, c 2 c_2 c2和 n 0 n_0 n0,对于所有的 n ≧ n 0 n \geqq n_0 n≧n0,有 c 1 ∣ g ( n ) ∣ ≦ ∣ f ( n ) ∣ ≦ c 2 ∣ g ( n ) ∣ c1 | g(n) | \leqq | f(n) | \leqq c2 | g(n) | c1∣g(n)∣≦∣f(n)∣≦c2∣g(n)∣ ,则记做 f ( n ) = Θ ( g ( n ) ) f(n) =\Theta (g(n) ) f(n)=Θ(g(n)) ,称g(n)为f(n)的渐近紧确界。
2. Θ \Theta Θ的意义:
f ( n ) f(n) f(n)和 g ( n ) g(n) g(n)时间复杂度相同,或者说二者是“同阶”的
四、时间复杂度的算术运算
O
(
f
(
n
)
)
+
O
(
g
(
n
)
)
=
O
(
m
a
x
{
f
(
n
)
,
g
(
n
)
}
)
\Omicron (f(n))+\Omicron(g(n)) = \Omicron(max\left\{f(n),g(n)\right\})
O(f(n))+O(g(n))=O(max{f(n),g(n)});(给出证明)
O
(
f
(
n
)
)
+
O
(
g
(
n
)
)
=
O
(
f
(
n
)
+
g
(
n
)
)
O(f(n))+O(g(n)) = O(f(n)+g(n))
O(f(n))+O(g(n))=O(f(n)+g(n)) ;
O
(
f
(
n
)
)
∗
O
(
g
(
n
)
)
=
O
(
f
(
n
)
∗
g
(
n
)
)
O(f(n))*O(g(n)) = O(f(n)*g(n))
O(f(n))∗O(g(n))=O(f(n)∗g(n));
O
(
c
f
(
n
)
)
=
O
(
f
(
n
)
)
O(cf(n)) = O(f(n))
O(cf(n))=O(f(n)) ;
若
g
(
n
)
=
O
(
f
(
n
)
)
g(n)= O(f(n))
g(n)=O(f(n)) ,则有
O
(
f
(
n
)
)
+
O
(
g
(
n
)
)
=
O
(
f
(
n
)
)
O(f(n))+O(g(n)) = O(f(n))
O(f(n))+O(g(n))=O(f(n)) 。
Ω
、
Θ
\Omega、\Theta
Ω、Θ也有类似性质,证明方法类似。