是否有一个众所周知的算法,给定一组集合,每两个集合至少有一个共同元素?例如,给出以下输入:
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
我已经有了一个有效的实现,但似乎很常见,我必须要有一个名字。
答案 0 :(得分:4)
您可以将其建模为一个简单的图形问题:为每个不同的元素引入一个节点。为每个集合引入一个节点。将每个集合连接到它包含的元素。您将得到(无向)二分图,其中连接的组件是您的问题的解决方案。您可以使用depth-first search查找CC。
运行时应该是线性的(使用哈希表,因此只有预期的运行时间,除非你的数字有界)。
我认为它不值得一个特殊的名字,它只是一个众所周知的概念的应用。