0

ArrayListのような文字列があるとします[a, b, c, d, ....]。このリストから特定の文字列を含むすべての可能なパワーサブセットを含む結果を得るにはどうすればよいかというサンプルコードを手伝ってもらえますか?

a例:例のリストを含むすべての電力サブセットを取得したい場合、出力は次のようになります。

[a,b], [a,c], [a,d], [a,b,c], [a,b,d], [a,c,d] without the empty and single subset([a])

同様に、必要な場合b、出力は次のようになります。

[b,a], [b,c], [b,d], [b,a,c], [b,a,d], [b,c,d] without the empty and single subset([b])

例のリストの項目はすべて文字列であるため、サブセットが豊富すぎるとメモリの問題になる可能性があります。一度に 1 つの文字列に対して、このサブセットをメモリに保持する必要があるためです。サブセットを作成するときのように、aさらに処理するためにそれらのサブセットが必要であり、それらを削除してから、bなどです。では、このシナリオの最適化されたソリューションについても助けが必要ですか?

Java のヘルプが必要です。Javaはあまり得意ではないので、間違っていたらご容赦ください。

4

1 に答える 1

1

特定の要素が常に 1 つしかない場合は、ソース セットからターゲット要素を削除Sets.powerSetし、残りのセットで Guava を使用してから、返されたセットにターゲット要素を追加することをお勧めします。何かのようなもの...

Set<String> elems = Sets.newHashSet(set);
elems.remove(target);
Set<Set<String>> powerSet = Sets.powerSet(elems);
Collection<Set<String>> subsetsWithTarget = Collections2.transform(
    powerSet, new Function<Set<String>, Set<String>>() {
  public Set<String> apply(Set<String> setWithoutTarget) {
    return Sets.union(setWithoutTarget, Collections.singleton(target));
  }
});

(開示:私はGuavaに貢献しています。)

于 2012-06-22T17:06:38.257 に答える