簡體   English   中英

查找時間復雜度,何時添加/相乘

[英]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)
  • 但發生時間最長的是 function pascal ,其時間復雜度為O(2^n/sqrt(n)) 您可以在這里看到為什么是O(2^n/sqrt(n))而不是O(2^n)https://stackoverflow.com/a/26229383/13292734
  • 所以時間復雜度是: O(n^2)*(2^n/sqrt(n)) 或者你可以說: O(n^2)*(2^n)這也是正確的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM