我正在寻找一种聪明/快速的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]
结果将所有常见对象与所有关联元素组合在一起。列表之间没有共享对象。
答案 0 :(得分:6)
对于每个对象,计算包含它的元素。
即
01 -> [E1, E3]
02 -> [E4]
03 -> [E2, E5]
04 -> [E3]
05 -> [E3, E4]
06 -> [E5]
这些列表会产生一个图形:每个元素都有一个顶点,如果相应的元素出现在同一个列表中,则会连接两个顶点。
在我看来,您想要计算的是图表的connected components。