Algorithm 连接具有相似元素的多个子集的最快方法是什么?

Algorithm 连接具有相似元素的多个子集的最快方法是什么?,algorithm,python-2.7,Algorithm,Python 2.7,我有一个50多万子集的列表,每个子集有1到500个值(整数)。所以我有点像: {1, 2, 3 } {2, 3} {4, 5} {3, 6, 7} {7, 9} {8, 4} {10, 11} 运行代码后,我希望得到: {1, 2, 3, 6, 7, 9} {4, 5, 8} {10, 11} 我编写了简单的代码,将每个子集与每个子集进行比较,如果它们相交,则将它们连接在一起,否则不会。 在小规模上是可以的,但在大数据量的情况下,这需要花费很长时间 请问,您能提出改进意见吗 另外,我的数学或

我有一个50多万子集的列表,每个子集有1到500个值(整数)。所以我有点像:

{1, 2, 3 }
{2, 3}
{4, 5}
{3, 6, 7}
{7, 9}
{8, 4}
{10, 11}
运行代码后,我希望得到:

{1, 2, 3, 6, 7, 9}
{4, 5, 8}
{10, 11}
我编写了简单的代码,将每个子集与每个子集进行比较,如果它们相交,则将它们连接在一起,否则不会。 在小规模上是可以的,但在大数据量的情况下,这需要花费很长时间

请问,您能提出改进意见吗


另外,我的数学或逻辑能力不强,大O符号对我来说是希腊语。很抱歉。

您试图在图形中查找连接的组件,每个输入集表示一组完全连接的节点。下面是一个简单的实现:

sets = [{1, 2, 3 },{2, 3},{4, 5},{3, 6, 7},{7, 9},{8, 4},{10, 11}]
allelts = set.union(*sets)
components = {X: {X} for X in allelts}
component = {X: X for X in allelts}
for S in sets:
    comp = sorted({component[X] for X in S})
    mergeto = comp[0]
    for mergefrom in comp[1:]:
        components[mergeto] |= components[mergefrom]
        for X in components[mergefrom]:
            component[X] = mergeto
        del components[mergefrom]
这将导致组件具有组件列表(由其最小元素键入),并且组件存储每个元素的组件:

>>> print(components)
{1: {1, 2, 3, 6, 7, 9}, 4: {8, 4, 5}, 10: {10, 11}}
>>> print(component)
{1: 1, 2: 1, 3: 1, 4: 4, 5: 4, 6: 1, 7: 1, 8: 4, 9: 1, 10: 10, 11: 10}
>>> 

可能重复的值是1..500范围内的所有整数吗?