算法分析与设计——第二章:时间复杂度

算法分析 第二章复习

计算时间的渐进表示(时间复杂度)


一、 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)cg(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 nn0,有 ∣ f ( n ) ∣ ≤ c ∣ g ( n ) ∣ | f(n) |≤c | g(n) | f(n)cg(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 nn0,有 ∣ f ( n ) ∣ ≧ c ∣ g ( n ) ∣ | f(n) | \geqq c | g(n) | f(n)cg(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 nn0,有 ∣ f ( n ) ∣ ≧ c ∣ g ( n ) ∣ | f(n) | \geqq c | g(n) | f(n)cg(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 nn0,有 c 1 ∣ g ( n ) ∣ ≦ ∣ f ( n ) ∣ ≦ c 2 ∣ g ( n ) ∣ c1 | g(n) | \leqq | f(n) | \leqq c2 | g(n) | c1g(n)f(n)c2g(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 ΩΘ也有类似性质,证明方法类似。
证明

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Desperado1024

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值