我已经编写了下面的代码以列出给定数组的所有组合。
但是我正在努力计算此递归函数的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]
答案 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)