如何找到递归算法的运行时复杂性?

时间:2018-10-01 22:55:11

标签: algorithm time-complexity big-o

我已经编写了下面的代码以列出给定数组的所有组合。

但是我正在努力计算此递归函数的Big-O复杂度。

public static void getCombinations(int[] input, int start,
                                   List<Integer> current,
                                   List<List<Integer>> output)
{
  output.add(new ArrayList<Integer>(current));

  if( start >= input.length )
    return;

  for(int ind=start; ind<input.length; ind++) {
    current.add(input[ind]);
    getCombinations(input, ind+1, current, output);
    current.remove(current.size()-1);
  }
}

方法的调用方式如下:

getCombinations(input, 0 /*start*/, current, output);

样本输入:

[1,2,3]

输出:

[]
[1]
[1, 2]
[1, 2, 3]
[1, 3]
[2]
[2, 3]
[3]

1 个答案:

答案 0 :(得分:1)

再想一想,我认为这可以写成:

(1) T(N)  = T(N-1) + T(N-2) + T(N-3) + .... + 1
(2) T(N-1)=          T(N-2) + T(N-3) + .... + 1

因此,将上面的(1)中的(2)替换为

T(N) = T(N-1) + T(N-1)
     = 2*T(N-1)
     = 2*(2*T(N-2)) = 2*2*T(N-2) = 2*2*2*T(N-3) etc
     = O(2^N)