最も効率的ではありませんが、解決策:
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
public class PowersetTest {
public static void main(String [] args){
Set<Set<String>> sets = permute(Arrays.asList("a","b","c","d","e"));
for (Set<String> item : sets){
System.out.printf("Set: %s%n", item.toString());
}
}
static public <T> Set<Set<T>> permute (Collection<T> items){
Set<Set<T>> result = new HashSet<Set<T>>();
for (final T item : items){
Set<T> subsetElements = filter(items, new Predicate<T>(){public boolean apply(T f){ return (f!=item);}});
if (subsetElements.size() > 0) {
result.addAll(permute(subsetElements));
}
Set<T> temp = new HashSet<T>();
temp.addAll(items);
result.add(temp);
}
return result;
}
static public <T> Set<T> filter(Collection<T> items, Predicate<T> filter){
Set<T> result = new HashSet<T>();
for (T item : items){
if (filter.apply(item)) {
result.add(item);
}
}
return result;
}
public interface Predicate<T>{ public boolean apply(T item); }
}
あなたはこれを言及しなかったが、私は内のインスタンスのために、あなたはセット内の各項目は、一度使用したいだけでしょう、あなたの質問から仮定セットA、B、C、D、E:AAAAは有効なペアリングではありませんか? –
あなたはABCDEをあなたのセットの適切な要素と考えているのですか? –
なぜこれをあなたのやり方と同じようにタイトル付けし、タグとして「比較」を挙げましたか?特定の文字列セットがその中にあるかどうかをテストするためにpowersetを生成していますか?もしそうなら、その情報を得るためのより効率的な人間関係があるかもしれません。 –