区间和的时间复杂度

时间:2017-02-14 01:54:31

标签: java algorithm time time-complexity

我试图理解算法的时间复杂性并遇到了这个问题。问题是计算间隔和(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)。如果条件会影响时间复杂性吗?

1 个答案:

答案 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)。