我正在努力尋找給定代碼的複雜性。我想我正在努力識別正確的複雜性,以及如何真正分析複雜性。要分析的代碼如下:查找給定代碼的複雜性
public void doThings(int[] arr, int start){
boolean found = false;
int i = start;
while ((found != true) && (i<arr.length)){
i++;
if (arr[i]==17){
found=true;
}
}
}
public void reorganize(int[] arr){
for (int i=0; i<arr.length; i++){
doThings(arr, i);
}
}
的問題是:
1)什麼是整編方法和它發生什麼樣的輸入最好的情況下的複雜性?
2)重組方法的最壞情況複雜度和它發生了什麼輸入?
我的答案是:
1)對於重新組織方法有可能出現的兩種可能的最好的情況下。首先是數組長度爲1時,這意味着reorganize和doThings方法中的循環只能運行一次。另一種可能性是,當數組的第i項是17時,意味着doThings循環不會在第i次迭代中完全運行。因此,在這兩種情況下,最好的情況=Ο(n)。
2)最糟糕的情況是當數字17在數組的末尾,而數字17不在數組中時。這將意味着該陣列將被遍歷n×n次,這意味着最壞的情況將是Ο(n^2)。
任何人都可以請幫助我正確回答問題,如果我的不正確,並且如果可能的話解釋問題?
重組是一個可怕的名字。它只是搜索 –
我沒有看到'nxn' ...對我來說,只是'O(n)'在這兩種情況下 – Hackerman