我写了一个写为P(a)的幂集算法。只是了解算法的时间复杂性(Big-O),如果我错了,请纠正我。
算法:
function powerSet(int[] a ){
ArrayList pw = new ArrayList();
pw.add(" ");
for (int i = 1; i <= a.length; i++) //O(n){
ArrayList<String> tmp = new ArrayList<String>();
for (String e : pw)//O(n) {
if(e.equals(" "))
tmp.add(""+a[i-1]) //contanst time;
else
tmp.add(e+a[i-1]) //constant time;
}
pw.addAll(tmp)//O(1);
}
return pw;
}
这个O(n)* O(n)= O(n ^ 2)的时间复杂度,或者它是指数函数(c ^ n,其中c> 1),如2 ^ n,因为我是枚举所有可能的子集。
答案 0 :(得分:1)
外循环运行的次数为a.length
。内循环运行的次数为pw.length
,但随着函数的运行而增加。所以你不能说他们都是O(n)
。此外,pw.addAll(tmp)
不是固定时间。
此处,渐近时间复杂度与调用tmp.add()
的次数相同,等于pw
的最终大小:O(2^n)
。