[英]What is the Big-O class of the following nested for loop?
我需要幫助弄清楚為什么 Java 中的以下代碼片段是 O(nlogn) 而不是 O(n^2)。 請問有什么幫助嗎?
int sumSome(int[] arr){
int sum = 0;
for (int i=0; i<arr.length; i++) {
for (int j=1; j<arr.length; j = j*2) {
if (arr[i] > arr[j])
sum += arr[i];
}
}
return sum;
}
考慮一個通用的數字區間可能會有所幫助,比如1 到 100 。
但是,如果循環步驟的大小每次通過 loop 都發生變化,則會得到不同的結果:
所以在你的例子中,你有你的外循環 O(n) 乘以你的內循環 O(log n),導致一個組合的 O(n * log n)。
在這個答案中可以找到不同時間復雜度的很好的例子。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.