假设有这样一个for循环
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
for(k=1;k<=j;k++)
x++;
现在要求它的时间复杂度,看起来有点麻烦,但是只要我们把问题分解成若干个小问题一一解决,那么就容易多了。
首先,我们考虑这么一种情况,当i取值为a的时候,那么我们上面那个三层循环就变成了
for(j=1;j<=a;j++)
for(k=1;k<=j;k++)
x++;
这样看来,是不是一目了然了。
a的取值为 1 . 2 . 3 . 4 . 5 ... a-1 . a(用点隔开)
相应的,我们可以把上面那个二层for循环改写为一层循环
for(k=1;k<=[1 2 3 4 5 ......a-1 a];k++)
x++;
那么,我们这个for循环运行的总的时间复杂度就是
当然,这不是最终的时间复杂度,因为我们只是讨论了i取a的情况
所以,总的时间复杂度为 (i从1到n)
分成两项,分别是 和
前一项求和的渐进时间复杂度是,后一项求和的渐进时间复杂度是
所以上面的那个三层循环的时间复杂度为