Учитывая список рейтингов игроков, я должен разделить игроков (то есть рейтинги) на две группы как можно более справедливо. Цель состоит в том, чтобы минимизировать разницу между совокупным рейтингом команд. Нет никаких ограничений относительно того, как я могу разделить игроков на команды (одна команда может иметь 2 игрока, а другая команда может иметь 10 игроков).
Например: [5, 6, 2, 10, 2, 3, 4]
должен вернуться([6, 5, 3, 2], [10, 4, 2])
Я хотел бы знать алгоритм для решения этой проблемы. Пожалуйста, обратите внимание, что я прохожу вводный курс по программированию в Интернете, поэтому были бы полезны простые алгоритмы.
Я использую следующий код, но по какой-то причине он-лайн проверка кода говорит, что он неправильный.
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)
Обновление: я связался с инструкторами, и мне сказали, что я должен определить другую «вспомогательную» функцию внутри функции, чтобы проверить все различные комбинации, а затем мне нужно проверить минимальную разницу.