传递集合并

时间:2014-04-06 22:30:53

标签: algorithm set

是否有一个众所周知的算法,给定一组集合,每两个集合至少有一个共同元素?例如,给出以下输入:

A B C
B D
A E
F G H
I J
K F
L M N
E O

它会产生:

A B C D E O
F G H K
I J
L M N

我已经有了一个有效的实现,但似乎很常见,我必须要有一个名字。

1 个答案:

答案 0 :(得分:4)

您可以将其建模为一个简单的图形问题:为每个不同的元素引入一个节点。为每个集合引入一个节点。将每个集合连接到它包含的元素。您将得到(无向)二分图,其中连接的组件是您的问题的解决方案。您可以使用depth-first search查找CC。

运行时应该是线性的(使用哈希表,因此只有预期的运行时间,除非你的数字有界)。

我认为它不值得一个特殊的名字,它只是一个众所周知的概念的应用。