配列を集合に見立ててべき集合を生成する
// 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 で行けた。