[英]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.