Angesichts einer Liste von Bewertungen von Spielern muss ich die Spieler (dh Bewertungen) so fair wie möglich in zwei Gruppen aufteilen. Ziel ist es, den Unterschied zwischen der kumulierten Bewertung der Teams zu minimieren. Es gibt keine Einschränkungen, wie ich die Spieler in die Teams aufteilen kann (ein Team kann 2 Spieler haben und das andere Team kann 10 Spieler haben).
Zum Beispiel: [5, 6, 2, 10, 2, 3, 4]
sollte zurückkehren([6, 5, 3, 2], [10, 4, 2])
Ich würde gerne den Algorithmus kennen, um dieses Problem zu lösen. Bitte beachten Sie, dass ich an einem Online-Programmier-Einführungskurs teilnehme, daher wären einfache Algorithmen willkommen.
Ich verwende den folgenden Code, aber aus irgendeinem Grund sagt der Online-Codeprüfer, dass er falsch ist.
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)
Update: Ich habe die Instruktoren kontaktiert und mir wurde gesagt, ich sollte eine andere "Hilfs" -Funktion innerhalb der Funktion definieren, um alle verschiedenen Kombinationen zu überprüfen, dann muss ich nach dem minimalen Unterschied suchen.