所有子集的python集合来自一组大小为n的索引

时间:2014-12-17 16:27:08

标签: python algorithm memory set combinations

我需要为给定的大小为n的组找到大小为m的所有子集的集合。因此,在我的算法的最简单版本中,我使用 itertools.combinations(),但由于n = 566和m = 11,即使我等了10个小时,我也无法达到计算结束进程返回已杀死:9 。此外,我需要将一组集合作为对象(其中集合的元素也是集合)而不是元组列表,以便在计算上使问题更加复杂。

from itertools import combinations, product  
S = set()
Sf = frozenset(combinations(xrange(1, 566), 11))
for i in Sf:
    t = frozenset(i)
    S.add(t)

更软化的版本是在两个集合A和B上使用 intertools.combinations(),其中n = 566和m = 2和9(我将其称为d和k)然后最终集合S由这两个元素的元素(a和b元素的a和b)的并集构成,其中S = {t =a∪b:A中的a,b中的b, a∩b= 0}

A = set()
As = frozenset(combinations(xrange(1, 566), 2))
for i in As:
    a = frozenset(i)
    A.add(a)

B = set()
Bs = frozenset(combinations(xrange(1, 566), 9))
for j in Bs:
    b = frozenset(j)
    B.add(b)

ab = set()
ba = set()
for i in A:
    for j in B:
        if i.issubset(j):
            ab.add(i)
            ba.add(j)

A_ab = A.difference(ab)
B_ba = B.difference(ba)

S = frozenset(product(B_ba, A_ab))

最后我认为我的问题是计算时间和内存使用情况(我在i7 1.7 GHz和8 GB的RAM mac上使用python 2.7.9)。显然,如果有一个更有效和优化的算法,它会受欢迎!

0 个答案:

没有答案