[英]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++;
}
}
}
}
當j
是i
的倍數時, 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 % i
僅i
次等於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.