如何有效地连接所有相交的向量?

时间:2014-09-05 11:46:21

标签: c++ set-intersection set-union

假设我有一个矢量矢量:

std::vector<std::vector<int> > vec;

现在,在我的程序中,此向量包含在图形中创建循环的节点组。如果它们相交,它们会创建强连通组件。

我需要遍历此向量并有效地找到那些相交的向量,然后加入这些向量。它可以通过暴力set_intersection和set_union来完成,但它会非常慢。

例如,如果我有简单int元素的向量A-D,其中A,B,D相交。

A = [1,2,3,4]
B = [5,6,7]
C = [8,9]
D = [3,4,6,10]

我想要这个结果:

s1 = [1,2,3,4,5,6,7,10]
s2 = [8,9]

现在,我在过去的几个小时里尝试了很多东西,但是简单的谷歌搜索显示set_intersection方法很慢,我必须多次遍历所有节点集(我认为它将是N *(N) + 1)/ 2,所以O(N 2 )没有启发式。)

我需要有效地做到这一点,所以我想到的是循环遍历所有节点并记下我找到原始节点的位置,然后在一次搜索中将它们组合在一起,如果可能的话。 但是我无法找到或设计出这样的算法足够有效,所以我希望得到一些关于如何处理这个问题的帮助或想法。

谢谢。

0 个答案:

没有答案
相关问题