按共同元素对列表进行分组

时间:2013-03-19 15:21:33

标签: c++ algorithm

我正在寻找一种聪明/快速的C ++算法,它允许我在内部包含公共对象时对几个对象列表进行分组。假设我有N个列表,每个列表包含与一个元素E:

相关联的1..M对象(O)
[O1, O2]     -> E1
[O3]         -> E2
[O1, O4, O5] -> E3
[O2, O5]     -> E4
[O3, O6]     -> E5

我希望将它们重新排列为以下内容:

[O1, O2, O4, O5] -> [E1, E3, E4]
[O3, O6]         -> [E2, E5]

结果将所有常见对象与所有关联元素组合在一起。列表之间没有共享对象。

1 个答案:

答案 0 :(得分:6)

对于每个对象,计算包含它的元素。

01 -> [E1, E3]
02 -> [E4]
03 -> [E2, E5]
04 -> [E3]
05 -> [E3, E4]
06 -> [E5]

这些列表会产生一个图形:每个元素都有一个顶点,如果相应的元素出现在同一个列表中,则会连接两个顶点。

enter image description here

在我看来,您想要计算的是图表的connected components