Как мне ускорить реализацию моей жадной обложки?

Я придумал следующую реализацию обложки Greedy Set после долгих обсуждений относительно моего первоначального вопроса.Вот, Из полученной помощи я закодировал проблему в «Обложку жадного набора» и после получения дополнительной помощиВотЯ придумал следующую реализацию. Я благодарен всем за помощь в этом. Следующая реализация работает нормально, но я хочу сделать ее масштабируемой / быстрее.

Под масштабируемым / более быстрым я хочу сказать, что:

Мой набор данных содержит около 50K-100K наборов в SКоличество элементов в самом U очень мало, порядка 100-500Размер каждого набора в S может быть от 0 до 40

И вот моя попытка:

U = set([1,2,3,4])
R = U
S = [set([1,2]), 
     set([1]), 
     set([1,2,3]), 
     set([1]), 
     set([3,4]), 
     set([4]), 
     set([1,2]), 
     set([3,4]), 
     set([1,2,3,4])]
w = [1, 1, 2, 2, 2, 3, 3, 4, 4]

C = []
costs = []

def findMin(S, R):
    minCost = 99999.0
    minElement = -1
    for i, s in enumerate(S):
        try:
            cost = w[i]/(len(s.intersection(R)))
            if cost < minCost:
                minCost = cost
                minElement = i
        except:
            # Division by zero, ignore
            pass
    return S[minElement], w[minElement]

while len(R) != 0:
    S_i, cost = findMin(S, R)
    C.append(S_i)
    R = R.difference(S_i)
    costs.append(cost)

print "Cover: ", C
print "Total Cost: ", sum(costs), costs

Я не эксперт в Python, но любые специфичные для Python оптимизации этого кода были бы действительно хорошими.

Ответы на вопрос(2)

Ваш ответ на вопрос