如何让所有对一组有效的?(How to get all pairs of a set efficie

2019-08-03 19:37发布

给定的目标Set ,我想通过所有(无序)对它走。

例如:Set = {1,2,3},对:(1,2),(1,3),(2,3)。

当与处理Vector<Integer> ,可以与每个元素的索引的帮助下实现这一点:

for (int i = 0; i < vector.size(); i++)
  for (int j = i + 1; j < vector.size(); j++)
    // Do something with vector.get(i) and vector.get(j)

但是,在一个元素Set<Integer>有没有索引。

最好的解决办法,我发现到目前为止,是转换的Set到一个Vector和使用上面的解决方案。

是否有更有效的/直接的解决方案?

Answer 1:

List<Integer> list = new ArrayList<Integer>(mySet);
for (int i = 0; i < list .size(); i++)
    for (int j = i + 1; j < list .size(); j++)
        // Do something with vector.get(i) and vector.get(j)


Answer 2:

在这个算法=复杂性而言, n (n -1) / 2 ,因此为O(n ^ 2)是你能得到的最好(顺序)。

虽然,如果你的设置是真正的大,一组只适合在RAM中。 可以通过在类似于使用瓦片块矩阵乘法完成的块的方式来计算该对优化算法。 这样,您就可以减少缓存缺失的%,因此提高了整体性能。

除此之外,你可以因为算法似乎是尴尬的并行线程介绍/进程之间的并行化和分裂的工作。



文章来源: How to get all pairs of a set efficiently?
标签: java set