簡體   English   中英

嵌套 2 次的 for 循環的時間復雜度是多少?

[英]What will be the time complexity of a for loop nested 2 times?

所以估計時間復雜度的算法是這樣的

int a = 0;
for (i = 0; i < n; i++)   //runs from i-n;
    for (j = i; j < i * i; j++) // runs from i - i*i;
        for (k = 0; k < j; k++) //runs from 0 - j;
            a++;

我已經評論了我對算法的理解的基本細節。

外循環明顯運行 O(n) 次,第一個內循環從 'i' 運行到 'i*i'

第二個內部循環運行 '0' 到 'j'

我也知道我必須應用產品規則。

但我無法計算兩個內部循環相對於“n”的時間復雜度。

如果我的解釋有誤,請糾正我。

每當有疑問時,請始終使用數學,因為數學證明像強烈的直覺一樣更可口。

n = 輸入的大小。

最里面的循環或者讓我們調用它作為第三個循環運行j+1次。

內部循環或第二個循環運行i*i - i次。

最后,外循環n次。

因此,整個程序的迭代次數可以用數學術語表示,如下圖所示:

在此處輸入圖像描述

當您有多個級別的 for 循環時,請單獨分析每個循環的復雜性,然后將它們相乘。

在這個例子中,第一個循環的復雜度是O(n) ,就像你說的那樣。

第二個循環的復雜性是O(n^2)因為在最壞的情況下,您必須執行的操作數量是i*i的數量級,可能與n^2一樣大。 它不從零開始也沒關系,因為在像O(n^2 - n)這樣的表達式中,除了最高階項之外的所有內容都會被忽略。

第三個循環也需要O(n^2) ,因為在最壞的情況下,您可以擁有盡可能多的j操作,並且再次可能與n^2一樣大。

最后a++在恆定時間內發生。 將所有內容相乘,您的復雜度為O(n^5)

暫無
暫無

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

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