赞
踩
时间复杂度
一个语句的频度是指该语句在算法中被重复执行的次数。算法中所有语句的频度之和记作 T(n) ,它是算法的问题规模 n 的函数,时间复杂度主要分析 T(n) 的数量级。算法中基本运算(最深层循环内的语句)的频度与 T(n) 同数量级,因此通常采用算法中基本运算的频度 f(n) 来分析算法的时间复杂度。因此,算法的时间复杂度可以记为:
T
(
n
)
=
O
(
f
(
n
)
)
T(n) = O(f(n))
T(n)=O(f(n))
O 的含义是 T(n) 的数量级,其数学定义是:T(n) 和 f(n) 是定义在正整数集合上的两个函数,则存在正常数C和 n0 ,使得当n >= n0 时,都满足 0<=T(n)<=Cf(n)
结合以上描述,从数学意义上讲,T(n) 是函数 f(n) 的下界。
对于如下程序段:
int a = n;
while (a>0){
printf("基本运算的一次执行");
a--;
}
return n;
当 n 的值大于0的时候,基本运算 “a–” 会执行 n 次,直到 n = 0 ;这时a–执行的频度 f(n) = n ;
当 n 的值小于或等于 0 的时候,基本运算 “a–” 会执行 0 次,这时 a-- 执行的频度为 f(n) = 0;
可以看到,程序基本运算的执行次数,除了和程序本身有关外,还和输入的 n 的值有关系
所以,一个程序在执行的时候,根据基本运算被执行的次数,可以将复杂度分为最坏的时间复杂度,平均的时间复杂度,最好的时间复杂度。
在分析一个程序的执行效率的时候,一般都是考虑最坏情况下的时间复杂度。还是以上面的程序段作为例子,那么该程序段的时间复杂度为 T(n) = n ;
加法规则:
T
(
n
)
=
T
1
n
+
T
2
(
n
)
=
O
(
f
(
n
)
)
+
O
(
g
(
n
)
)
=
O
(
m
a
x
(
f
(
n
)
,
g
(
n
)
)
T(n) = T_1n+T_2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n))
T(n)=T1n+T2(n)=O(f(n))+O(g(n))=O(max(f(n),g(n))
乘法规则:
T
(
n
)
=
T
1
(
n
)
∗
T
2
(
n
)
=
O
(
f
(
n
)
∗
O
(
g
(
n
)
)
=
O
(
f
(
n
)
∗
g
(
n
)
)
T(n) = T_1(n)*T_2(n)=O(f(n)*O(g(n))=O(f(n)*g(n))
T(n)=T1(n)∗T2(n)=O(f(n)∗O(g(n))=O(f(n)∗g(n))
常见的渐进时间复杂度比较:
O
(
1
)
<
O
(
l
o
g
2
n
)
<
O
(
n
)
<
O
(
n
l
o
g
2
n
)
<
O
(
n
2
)
<
O
(
n
3
)
<
O
(
n
3
)
<
O
(
2
n
)
<
O
(
n
!
)
<
O
(
n
n
)
O(1)<O(log_2n)<O(n)<O(nlog_2n)<O(n^2)<O(n^3)<O(n^3)<O(2^n)<O(n!)<O(n^n )
O(1)<O(log2n)<O(n)<O(nlog2n)<O(n2)<O(n3)<O(n3)<O(2n)<O(n!)<O(nn)
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。