簡體   English   中英

最壞情況下的運行時間Big O

[英]Worst-case running time Big O

您能否解釋一下如何獲得該算法的最壞情況BigO。 我在讀教科書時遇到了類似的算法,但仍然不了解其背后的邏輯。

int t=0;
for(int x=0;x<num.length;x++){
    for(int y=0;y<num.length;y++){
        for(int p=0;p<num.length;p++){
            for(int w=0;w<num.length;w++){
                if(num[p][w]>num[x][y])
                {
                    t=num[x][y];
                    num[x][y]=num[p][w];
                    num[p][w]=t;
                }
            }
        }
    }
} 

邏輯很簡單。 讓我們從最內部的循環開始:

此循環運行num.length次。 假設n = num.length它在big-O表示法中最差的運行時復雜度是O(n)

for(int w=0;w<num.length;w++){
    ...
}

現在,當您在長度為p周圍放置另一個for循環時,它將運行上述for循環p次。 所以它是O(pn) 在您的情況下, p = num.length = n因此應為O(n*n) = O(n^2)

您的示例中有4個嵌套循環,因此答案為O(n^4)

為什么我忽略最內部循環的內容? 因為完成的操作數量恆定,所以將該數量設為c big-O表示法使用的漸近分析表示: O(c) is equivalent to O(1) 那來自big-O定義

如果您正在比較一個元素; ==或<或>對大小為n的列表或數組,則其最壞情況是O(n)。

因此,一個for循環的成本為:O(n),但您有4個for循環,每個循環的最壞情況為O(n)。

總成本為:n * n * n * n =最壞情況O(n ^ 4)。

暫無
暫無

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

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