[英]Finding Time Complexity, when to add/multiply them
如何找到嵌套循環的時間復雜度? 另外,如何找到由多個函數組成的程序的時間復雜度?
基本上,我很困惑何時添加/乘以時間復雜度。
#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);
}
這是我用來打印帕斯卡三角形的代碼。 如何找到它的時間復雜度?
for(k = 0; k<n; k++)
運行Θ(n)
。for(j = 0; j < nk; j++)
作為算術級數運行,所以它是Θ(n^2)
。Θ(n^2)
。pascal
function 運行O(2^n)
因為它是遞歸的,包含 2 個部分: pascal(n-1, i) + pascal(n-1, i-1);
您可以在此鏈接中查看完整說明: https://stackoverflow.com/a/360773/13292734綜上所述:
pascal
function,時間復雜度是Θ(n^2)
。pascal
,其時間復雜度為O(2^n/sqrt(n))
。 您可以在這里看到為什么是O(2^n/sqrt(n))
而不是O(2^n)
: https://stackoverflow.com/a/26229383/13292734O(n^2)*(2^n/sqrt(n))
。 或者你可以說: O(n^2)*(2^n)
這也是正確的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.