我试图理解算法的时间复杂性并遇到了这个问题。问题是计算间隔和(0 <= k <= length_of_list)。
public static void main(String args[]){
LinkedList<Integer> l=new LinkedList<Integer>();
l.add(4);
l.add(2);
l.add(3);
l.add(1);
l.add(5);
int k=2;
List result = new ArrayList();
int n = l.size();
for(int i = 0; i < n; i++){
if(i >= k-1){
int sum = 0;
for(int j = i; j >= i-k+1; j--){
sum += in.get(j);
}
result.add(sum);
}
}
System.out.println(result);
}
有人能解释一下上面代码的时间复杂度吗?是n * k还是n ^ 2(因为k&#39的最大值是n)。如果条件会影响时间复杂性吗?
答案 0 :(得分:0)
内循环执行O(n-k)次,因为if
多次,即O(n)。
内循环是O(k) - 它迭代的次数。
然后整个算法是O(n)* O(k)= O(n * k)。
你可以认为它是O((n - k)* k),但对于k <&lt;&lt; n,与O(n * k)相同。
对于k大小接近n的边缘情况,复杂度将为O(n),因为if
将为真O(1)次,并且内循环将为O(k) ,对于k~n为O(n),所以整体为O(n)。