2017-02-26 1 views
0

set<Integer>(数千)と仮定します。 デカルト積を実行したいが、重複はしない。Java7デカルトのデカルトデカルトベクトル

重複したエントリは、セット内に逆の要素があるとみなされます(つまり、<1,3>および<3,1>は重複とみなされます)。

どうすれば効率的に行うことができますか?

まず、私はSets.cartesianProduct(set, set)を使用して〜22Mの要素になりますが、重複も含まれています。そのリストをもう一度繰り返してresult.contains(..)をチェックするのは効率的ではありません。

+0

'set 'からソートできるものに切り替えるオプションがありますか? –

答えて

1

おかしいが、私は数時間のために、このいじりてきた、と私はstackoverflowの中に質問を書いた瞬間は、私は突然の答え自分自身を実現;)

編集以下@DmitryGorkovets改善

for (int i = 0; i < list.size(); i++) { 
    for (int j = i+1; j < list.size(); j++) { 
     result.add(new Pair<>(list.get(i), list.get(j))); 
    } 
} 
+2

jの 'i + 1'から始めることができます。この場合、 'i == j'をチェックするべきではありません。 –

+0

あなたは指定しませんでしたが、私は 'list'はあなたのセットのソートされたリストだと思いますか? –

+0

@KlitosKyriacou実際それはありません。それはなぜ重要なのでしょうか? –