关于代码段的时间复杂度
时间复杂度是衡量一段代码或者一个算法是否优秀的重要标准。
一个语句在这个函数中执行的次数成为语句频度或者时间频度,T(n)。
现有一个辅助函数,f(n),当n为极限值时,T(n)/f(n)为一个不为零的常量,则他俩是同量级函数,T(n)=O(f(n))。这就是时间复杂度。
若算法语句的执行次数为一个常数,那么它的算法复杂度为O(1)。
计算规则:
1、 找到运行次数最多的语句
2、 计算语句执行次数的数量级
3、 用O来表示结果
一个例子:
for (i=1; i<=n; i++)
x++;
for
(i=1; i<=n; i++)
for (j=1; j<=n; j++)
x++;
第一个循环O(n);
第二个循环O(n平方);
总的:O(n平方)。
另一个例子:
a=0;
b=1; ①
for
(i=1;i<=n;i++) ②
{
s=a+b; ③
b=a; ④
a=s; ⑤
}
解:
语句1的频度:2,
语句2的频度:n,
语句3的频度:n,
语句4的频度:n,
语句5的频度:n,
T(n) = 2+4n
f(n) = n
lim(T(n)/f(n)) = 2*(1/n) + 4 = 4
T(n) = O(n).
最后一个例子:
i=1;
①
while
(i<=n)
i=i*2; ②
1的时间复杂度是O(1)
2的运行次数是log2n
所以总的时间复杂度为O(log2n)。
浙公网安备 33010602011771号