下面的程序是查找数组的所有子集。程序的时间复杂度是否为O(2 ^ n)?
有没有简单的方法可以找到递归函数的时间复杂度?
感谢您的期待
public static void getAllSubSet(int[] arr,int[] subset,int index){
if(index == arr.length)
printarr(subset);
else{
subset[index] = -1;
getAllSubSet(arr, subset, index+1);
subset[index] = arr[index];
getAllSubSet(arr, subset, index+1);
}
}
public static void printarr(int[] set){
for(int i=0;i<set.length;i++){
if(set[i] != -1){
System.out.print(set[i] +" ");
}
}
System.out.println("");
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = {1,2,3};
int[] subset = new int[arr.length];
getAllSubSet(arr, subset, 0);
}
答案 0 :(得分:0)
回答您的第一个问题:
您的功能的复杂性为O(n* 2^n)
。但是,如果n非常大,则可以忽略n。
回答您的第二个问题:
我发现用于近似递归算法复杂度的最佳方法之一是绘制递归树。一旦有了递归树,就可以找到复杂性。