渐进时间复杂度
估计程序的时间开销,一般统计程序中“基本操作”的数量,可排除机器速度的影响,衡量算法优劣。“基本操作”的数量往往可以写成关于“输入规模”n的表达式,保留增长最大项并忽略系数得到的表达式成为算法的渐进时间复杂度。
忽略了很多细节因素,并不精确,但抓住主要矛盾!
上界O、下界Ω、同阶Θ标记
T(n) = Θ(f(n)) 表示T(n)与f(n)同阶,增长情况相同。
O 表示增长率小于f(n)
Ω 表示增长率大于f(n)
- 上界分析:假定各种最坏情况同时取到,得到上界。很多情况下,这个上界与实际情况同阶,称为“紧”上界;也有可能因为分析方法不够好,得到“松”上界,过高地估计了实际时间。用于分析多层循环很有效。
- 递归分析:时间递推表达式 如T(n) = 2T(n)+Θ(n),T(1)=1 得T(n)=Θ(nlogn)
对待分析结果
渐进时间复杂度为多项式 T ( n ) = Θ ( n p ) p 为 常 数 T(n) = \Theta(n^p)\quad p为常数 T(n)=Θ(np)p为常数的算法称为多项式时间算法;而 n ! n! n!或 2 n 2^n 2n这样低效的算法成为指数时间算法,不仅能解决的问题规模小,而且时间开销增长快。
T(n) | n ! n! n! | 2 n 2^n 2n | n 3 n^3 n3 | n 2 n^2 n2 | n l o g n nlogn nlogn |
---|---|---|---|---|---|
n | 8 | 20 | 300 | 10000 | 1 0 6 10^6 106 |