计算机科学中,算法的
时间复杂度是一个函数,它定量描述了该算法的运行时间。这是一个关于代表算法输入值的
字符串的长度的函数。时间复杂度常用
大O符号表述,不包括这个函数的低阶项和首项系数。使用这种方式时,时间复杂度可被称为是渐近的,它考察当输入值大小趋近无穷时的情况。
计算:
算法(Algorithms)的复杂度(Complexity)是指运行一个算法所需消耗的资源(时间或者空间)。同一个算法处理不同的输入数据所消耗的资源也可能不同,所以分析一个算法的复杂度时,主要有三种情况可以考虑,最差情况(Worst Case)下的,平均情况(Average Case)的, 最好情况(Best Case)下的。
最差的复杂度符合我们的要求,那么所有的情况可以包含在里面。
计算 1 + 2 + 3 + 4 + ...... + 100。代码如下,之前也有讲过:
另外一种方法:
计算:
1.一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),称O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。
分析:随着模块n的增大,算法执行的时间的增长率和 f(n) 的增长率成正比,所以 f(n) 越小,算法的时间复杂度越低,算法的效率越高。
2. 在计算时间复杂度的时候,先找出算法的基本操作,然后根据相应的各语句确定它的执行次数,再找出 T(n) 的同
数量级(它的同数量级有以下:
1,log2n,n,n log2n ,n的平方,n的三次方,2的n次方,n!),找出后,f(n) = 该数量级,若 T(n)/f(n) 求极限可得到一常数c,则时间复杂度T(n) = O(f(n))
for(i=1; i<=n; ++i)
{
for(j=1; j<=n; ++j)
{
c[i][j] = 0;//该步骤属于基本操作执行次数:n的平方次
for(k=1; k<=n; ++k)
c[i][j] += a[i][k] * b[k][j];//该步骤属于基本操作执行次数:n的三次方次
}
}
二、算法的最坏情况。
算法(Algorithms)的复杂度(Complexity)是指运行一个算法所需消耗的资源(时间或者空间)。同一个算法处理不同的输入数据所消耗的资源也可能不同,所以分析一个算法的复杂度时,主要有三种情况可以考虑,最差情况(Worst Case)下的,平均情况(Average Case)的, 最好情况(Best Case)下的。
最差的复杂度符合我们的要求,那么所有的情况可以包含在里面。
计算 1 + 2 + 3 + 4 + ...... + 100。代码如下,之前也有讲过:
#include "stdio.h"
int main()
{
int i, sum = 0, n = 100; /* 执行1次 */
for( i = 1; i <= n; i++) /* 执行 n+1 次 */
{
sum = sum + i; /* 执行n次 */
//printf("%d \n", sum);
}
printf("%d", sum); /* 执行1次 */
}
另外一种方法:
1
#include "stdio.h"
2
3
int main()
4
{
5
int sum = 0, n = 100; /* 执行1次 */
6
sum = (1 + n) * n/2; /* 执行1次 */
7
8
printf("%d", sum); /* 执行1次 */
9
}