Biorąc pod uwagę listę ocen graczy, jestem zobowiązany do podzielenia graczy (tj. Ocen) na dwie grupy tak uczciwie, jak to możliwe. Celem jest zminimalizowanie różnicy między skumulowaną oceną drużyn. Nie ma żadnych ograniczeń co do tego, w jaki sposób mogę podzielić graczy na drużyny (jedna drużyna może mieć 2 graczy, a druga drużyna może mieć 10 graczy).
Na przykład: [5, 6, 2, 10, 2, 3, 4]
powinien wrócić([6, 5, 3, 2], [10, 4, 2])
Chciałbym znać algorytm rozwiązania tego problemu. Pamiętaj, że biorę kurs wprowadzający do programowania online, więc proste algorytmy byłyby mile widziane.
Używam następującego kodu, ale z jakiegoś powodu narzędzie do sprawdzania kodów online twierdzi, że jest niepoprawne.
def partition(ratings):
set1 = []
set2 =[]
sum_1 = 0
sum_2 = 0
for n in sorted(ratings, reverse=True):
if sum_1 < sum_2:
set1.append(n)
sum_1 = sum_1 + n
else:
set2.append(n)
sum_2 = sum_2 + n
return(set1, set2)
Aktualizacja: skontaktowałem się z instruktorami i powiedziano mi, że powinienem zdefiniować inną funkcję „pomocnika” wewnątrz funkcji, aby sprawdzić wszystkie różne kombinacje, a następnie muszę sprawdzić minimalną różnicę.