时间复杂度
前提:
1. 单核处理器;
2. 32bit 机器;
3. 程序顺序执行(sequential execution);
4. 算数运算和逻辑操作 为一个单元时间(unittime);
5. 赋值操作也算作一个单元时间;
6. return操作(函数中返回)也算作一个单元时间
时间复杂度计算实例
1. 函数如下
int sum(int a, int b)
{
return a+b;
}
时间复杂度为2(算数操作+ 和 函数返回值return操作)
Tsum = 2;
这是一个常量时间(constant time)
2. 计算数组中数值的和
int SumofArr(int *A, int n)
{
int nTotal = 0; // 1
for(int i=0; i<n; i++) // 2
{
nTotal = nTotal+A[i]; // 3
}
return nTotal; // 4
}
这个函数的时间复杂度怎么计算呢?
上面标注的4行各自的时间复杂度之和。
代码行数 Cost 次数
1 1(c1) 1
2 2 (c2) n+1
3 2 (c3) n
4 1 (c4) 1
TsumofArr = 1*1 + 2*(n+1) + 2*n + 1*1 =4n+4
T(n) = cn + c’
其中(c = c2+c3, c’=c1+c2+c4)
总结: Tsum = K; 常量时间,时间复杂度为0(1)
TsumofArr= cn+c’; 线性变化, 时间复杂度为O(n)