我们知道,算法中有时间复杂度这样一个概念,那么如何理解时间复杂度呢?下面举个例子:
话说大数学家高斯小时候老师出了个题:
1+2+3+···+100=?
于是大家都认真计算起来,只有高斯不为所动,老师很诧异,问他为什么不开始计算,高斯说他算完了:
1+2+3+···+100
+
100+99+98+···+1
=
101+101+···+101
= 102*100/2=5050
果然是天才的思路!
// 通过具体的 n 的步骤就可以推演出算法的复杂度
int sum1(int n){ // 时间复杂度 O(n)
int sum = 0; // 执行 1 步
for (int i = 1; i <= n; i++) // 执行 n 步
{
sum += i;
}
return sum;
}
int sum2(int n){// 时间复杂度 O(1)
return (1 + n) * n / 2;// 1步
}
这个例子就告诉我们,凡夫俗子的算法复杂度就是O(n),天才的算法复杂度就是O(1)。