Java7笛卡尔积versia没有重复
Java7 Cartesian Product versia without duplicates
假设我有 set<Integer>
(几千)。
我想执行笛卡尔积但没有任何重复项。
重复的条目被认为在集合中具有逆元素(即 <1,3>
和 <3,1>
被认为是重复的)。
我怎样才能有效地做到这一点?
首先我使用 Sets.cartesianProduct(set, set)
得到 ~22M 元素,但它也包含重复项。再次迭代该列表以检查 result.contains(..)
根本没有效率。
有趣的是,我已经弄乱了几个小时,当我在 Whosebug 中写问题的那一刻,我突然自己想到了答案;)
根据@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)));
}
}
假设我有 set<Integer>
(几千)。
我想执行笛卡尔积但没有任何重复项。
重复的条目被认为在集合中具有逆元素(即 <1,3>
和 <3,1>
被认为是重复的)。
我怎样才能有效地做到这一点?
首先我使用 Sets.cartesianProduct(set, set)
得到 ~22M 元素,但它也包含重复项。再次迭代该列表以检查 result.contains(..)
根本没有效率。
有趣的是,我已经弄乱了几个小时,当我在 Whosebug 中写问题的那一刻,我突然自己想到了答案;)
根据@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)));
}
}