算法时间复杂度

来源:互联网 发布:女神联盟2进阶12数据 编辑:程序博客网 时间:2024/04/28 08:52

算法时间复杂度定义:(引用《大话数据》)

在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变化并确定T(n)的数量级。算法的时间复杂度,也就是算法的时间度量,记作:T(n) = O(f(n))。他表示随时间规模n的增大,算法执行时间的增长率和f(n) 的增长率相同,称作算法的渐进时间复杂度,简称为时间复杂度。其中f(n)是问题规模哦n的某个函数。


定义的文字很难理解,让我们用一个简单的例子说明一下:

1 + 2 + 3 + 4 +.........+ 100 用C编译:

#include <stdio.h>
void main()
{
int i, sum = 0; //执行一次
for (i = 1; i <= 100; i++) //执行了n+1次
{
sum += i; //执行n次
}
printf ("和为:%d\n",sum);//执行了1次
}

所以这道程序所执行的总次数为:1 + (n+1) + n + 1 = 2n + 3 


“大O阶”推导算法时间复杂度

第一步:用常数1取代运行时间中的所有加法常数。

                   2n + 3  == 2n + 1 (3为加法中的常数)


第二步:在修改后的运行次数函数中,只保留最高阶项。

                   2n + 1 == 2n


第三步:如果最高阶项存在且不是1,则去除与这个项相乘的常数。得到的结果就是大0阶。

               2n + 1 == n


因此最后我们得到上面那段代码的算法时间复杂度表示为:0(n)



1 0