函数渐进上界:一般意义上的时间复杂度
给定一个输入大小为 n 的函数:
void algorithm(int n) {
int a = 1; // +1
a = a + 1; // +1
a = a * 2; // +1
// 循环 n 次
for (int i = 0; i < n; i++) { // +1(每轮都执行 i ++)
System.out.println(0); // +1
}
}
设算法的操作数量是一个关于输入数据大小 n 的函数,记为 T(n),则以上函数的操作数量为:
T(n) 是一次函数,说明其运行时间的增长趋势是线性的,因此它的时间复杂度是线性阶。
我们将线性阶的时间复杂度记为O(n) ,这个数学符号称为大O记号(big-O notation),表示函数 T(n) 的 渐近上界(asymptotic upper bound)。
时间复杂度分析本质上是计算“操作数量T(n) ”的渐近上界,它具有明确的数学定义。
如下图所示,计算渐近上界就是寻找一个函数 f(n) ,使得当 n 趋向于无穷大时, T(n) 和 f(n) 处于相同的增长级别,仅相差一个常数项 c 的倍数。