了解动力装置的大O.

时间:2012-12-27 06:17:07

标签: algorithm big-o

我写了一个写为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,因为我是枚举所有可能的子集。

1 个答案:

答案 0 :(得分:1)

外循环运行的次数为a.length。内循环运行的次数为pw.length,但随着函数的运行而增加。所以你不能说他们都是O(n)。此外,pw.addAll(tmp)不是固定时间。

此处,渐近时间复杂度与调用tmp.add()的次数相同,等于pw的最终大小:O(2^n)