簡體   English   中英

帶有 if 語句的嵌套 for 循環的時間復雜度

[英]Time Complexity of Nested for Loops with if Statements

此代碼的 if 語句如何影響此代碼的時間復雜度?

基於這個問題:運行時分析,if 語句中的 for 循環將運行 n*n 次。 但是在這段代碼中, j超過了i ,因此一旦運行第二個循環j = i^2 那么這使第三個 for 循環的時間復雜度如何呢? 我知道第一個 for 循環運行 n 次,第二個運行n^2次,第三個在觸發時運行n^2次。 因此,復雜性將由n*n^2(xn^2)給出,其中n是 if 語句為真的次數。 復雜性不僅僅是O(n^6) ,因為 if 語句不是真的 n 次,對吧?

int n;
int sum;
for (int i = 1; i < n; i++)
{
  for (int j = 0; j < i*i; j++)
    {
      if (j % i == 0)
        {
          for (int k = 0; k < j; k++)
            {
              sum++;
            }           
        }       
    }   
}

ji的倍數時, if條件為真; j從 0 變為i * i時,這會發生i次,因此第三個for循環僅運行i次。 總體復雜度為 O(n^4)。

for (int i = 1; i < n; i++)
{
  for (int j = 0; j < i*i; j++)       // Runs O(n) times
    {
      if (j % i == 0)                 // Runs O(n) × O(n^2) = O(n^3) times
        {
          for (int k = 0; k < j; k++) // Runs O(n) × O(n) = O(n^2) times
            {
              sum++;                  // Runs O(n^2) × O(n^2) = O(n^4) times
            }
        }
    }
}

復雜性不僅僅是 O(n^6),因為 if 語句不是真的 n 次,對吧?

不它不是。

在最壞的情況下,它將是O(n^5) 它小於這個值,因為j % ii次等於0

第一個循環運行n次。
第二個循環運行O(n^2)次。
第三個循環最多運行O(n)次。

循環的最差組合復雜度將是O(n) x O(n^2) x O(n) ,即O(n^4)

暫無
暫無

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

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