空间复杂度分析
消耗与数量无关
// 循环
int Sum(int a[], int n) {
int tsum = 0;
for (int i = 0; i < n; i++)
tsum += a[i];
return tsum;
}
消耗与数量有关
// 递归
int Rsum(int a[], int n) {
if (n > 0)
return Rsum(a, n - 1) + a[n - 1];
return 0;
}
执行步数分析
多项式求值
int PolyEval(int c[], int n, int x) {
int y = 1, value = c[0];
for (int i = 1; i <= n; i++) { // n 次循环
// 每次两个乘法一个加法
y *= x;
value += y * c[i];
}
return value;
}
Horner 算法
int Horner(int c[], int n, int x) {
int value = c[n];
for (int i = 1; i <= n; i++) { // n 次循环
// 一次乘法一次加法
value = value * x + c[n - i];
}
return value;
}
一般程序
int Sum(int a[], int n) {
int tsum = 0, count;
count++; // 赋值操作(tsum = 0)
for (int i = 0; i < n; i++) {
count++; // 每次 for 循环判断(i<n)
tsum += a[i];
count++; // 加等操作(tsum += a[i])
}
count++; // 最后一次 for 循环判断
count++; // return 操作
return tsum;
}
递归程序
int Rsum(int a[], int n) {
int count;
count++; // if 语句
if (n > 0) {
count++; // 加法操作
count++; // return 操作
return Rsum(a, n - 1) + a[n - 1];
}
count++; // return 操作
return 0;
}
t(0)=2 且 t(n)=t(n-1)+3
时间复杂度分析
上界 O
O不一定是最小上界, 但一般都是求最小上界
, 当且仅当存在数 和 , 使得对所有 , 有 , 则称 是 的上界
例如, , 当 时, , 因此
, 当 时, , 当 时, , 因此 时, , 所以
松散上界
当 时, , 因此 是 的松散上界
下界 Ω
, 当且仅当存在数 和 , 使得对所有 , 有
例如, 对于所有的 , , 因此
, 因此
非最大下界
如 ,
上下界 Θ
, 当且仅当存在数 , 和 , 使得对所有 , 有
例如对于 存在 , 因此
上界非下界 o
例如 但是