配列を集合に見立ててべき集合を生成する

// List を集合に見立ててべき集合を生成する
static <T> List<List<T>> powerset(List<T> set) {
    List<List<T>> powerset = new ArrayList<List<T>>();

    for(int i = 0; i < Math.pow(2, set.size()); i++) {
        List<T> subset = new ArrayList<T>();
        int n = i;
        for(T x : set) {
            if((n & 1) == 1) {
                subset.add(x);
            }
            n >>= 1;
        }
        powerset.add(subset);
    }

    return powerset;
}

Java には整数を引数に取るべき乗関数がないので即席で作った。まさかビット演算子がこんなところで役に立つとはなぁw

追記 : 普通に Math.pow で行けた。