Python: Найти подмассив в массиве с максимальным количеством элементов X, сумма которых меньше или равна заданному числу - PullRequest
0 голосов
/ 21 апреля 2020

list1 = [2, 4, 6, 8, 10]

given_number = 7

Проблема заключается в следующем: Найти подмассив с максимальными элементами X, сумма которых меньше или равна Y. Допустим, X = 2 и Y = 7, ответ будет: [2, 4] или [6].

Теперь это широко обсуждаемая проблема, я думаю, что она называется проблемой максимального подмассива. Однако не наивное решение этой проблемы возвращает только сумму подмассива и не предоставляет сам подмассив. Пример такого решения:

https://www.geeksforgeeks.org/maximum-sum-subarray-sum-less-equal-given-sum/?ref=lbp

Мне интересно, есть ли не наивный способ получения этого оптимального подмассива?

РЕДАКТИРОВАТЬ: Возможный ответ на эту проблему, хотя все еще наивный (все кредиты для этого идет к моему другу):

1) Создайте все комбинации подмножеств с помощью itertools:

combs = [list(x) for x in itertools.combinations(list1, number_of_elements)]

2) Сортировка по размеру суммы:

sorted_combs = sorted(combs, key=lambda x: sum(x), reverse=True)

3) Возьмите первую сумму, меньшую или равную данной сумме:

given_sum = 7 optimal_subset = None for sc in sorted_combs: if sum(sc) <= given_sum: optimal_subset = sc break

...