【发布时间】:2020-08-12 15:15:06
【问题描述】:
如何求嵌套循环的时间复杂度? 还有,如何求一个包含多个函数的程序的时间复杂度?
基本上,我很困惑何时添加/乘以时间复杂度。
#include <stdio.h>
long pascal(int, int);
int main()
{
int n,m,k,j;
printf ("Enter the height for Pascal's Triangle: ");
scanf("%d", &n);
for(k = 0; k<n; k++)
{
for(j = 0; j < n-k; j++)
{
printf(" ");
}
for(m = 0; m <= k; m++)
{
long f = pascal(k, m);
printf("%ld ", f);
}
printf("\n");
}
return 0;
}
long pascal(int n, int i)
{
if(n == i || i == 0)
return 1;
else
return pascal(n-1, i) + pascal(n-1, i-1);
}
这是我用来打印帕斯卡三角形的代码。如何求其时间复杂度?
【问题讨论】:
-
时间复杂度是程序正在执行的“步数”(直到一个常数因子/偏移量)。因此,您在添加步骤时添加“复杂性”,并在它们相乘时将它们相乘。当你有一个嵌套循环时,显然内循环中的步数乘以外循环运行的次数。除非这些数字不是恒定的并形成某种系列。
-
这是否回答了您的问题:stackoverflow.com/questions/11032015/… ?
-
在您的内部循环中,您首先执行
n-k步骤,然后执行k步骤 - 乍一看就是n步骤,并且当您重复此 n 次时,此是 O(N²) 次迭代。但是,您随后会调用一个递归函数,这会增加复杂性。
标签: c time time-complexity complexity-theory