З огляду на перелік рейтингів гравців, я зобов’язаний максимально справедливо розподілити гравців (тобто рейтинги) на дві групи. Мета - мінімізувати різницю між сукупним рейтингом команд. Немає обмежень щодо того, як я можу розділити гравців на команди (одна команда може мати двох гравців, а друга команда може мати 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)
Оновлення: я зв’язався з інструкторами, і мені сказали, що я повинен визначити іншу функцію "помічник" всередині функції, щоб перевірити всі різні комбінації, то мені потрібно перевірити мінімальну різницю.