2

私が理解しようとしているのは、値の不定のセットの順序に関係なく、可能なペアを作成するアルゴリズムです。

たとえば、セットがA、B、C、D、Eであるとします。

可能なセットは

AB AC AD AE BC CD DE

しかし...私も2つ以上の値のペアが必要です。

例えば

ABC ABD ABE BCD BCE

ABCDまたはABCEも。ここでの問題は、文字列STRing []の配列を入力してメソッドを作成したいのですが、出力は、値の数-1までの2,3....のペアの文字列のリストになります。

誰かが解決策を考えているなら、助けてください。:)

4

4 に答える 4

5

パワーセットを構築したいようです。この質問は基本的に同じです。回答を探してください。

于 2009-06-09T18:11:30.953 に答える
0

これは、計算量が最も多いことの1つです。これは、リモートで大量のデータセットを使用しても、まったく拡張性がありません。

無限集合には実際には実用的ではありません。生成できるペアを制限して、このスケールを改善することができます。

于 2009-06-09T18:07:15.687 に答える
0

作成したいのは、入力の順列のある種の累乗セットです。

Java の反復子の概念では、理論的には無限のシーケンスが可能です。

しかし、あなたの質問は比較と何の関係がありますか?

于 2009-06-09T18:13:27.817 に答える
0

最も効率的ではありませんが、解決策は次のとおりです。

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); }
}
于 2009-06-09T19:05:28.717 に答える