Как называется следующее?

#algorithm

#алгоритм

Вопрос:

У меня простая алгоритмическая проблема.

  • У меня есть набор положительных целых чисел S и положительное максимальное целое число i .
  • Допустим, сумма S (или подмножество S ) является суммой его элементов.
  • Мне нужно найти подмножество s из S , сумма которого не превышает i и является «максимально суммирующей», что означает, что никакое другое подмножество S не имеет большей суммы, чем s без превышения i .

Тривиальное решение, которое я придумал, состоит в том, чтобы просмотреть каждый набор степенного набора S и суммировать целые числа, отслеживая набор с искомыми свойствами, но этот алгоритм, очевидно, экспоненциальный.

Должно быть хорошо известное название для этой проблемы, поскольку я не думаю, что я первый, кто столкнулся с этой необходимостью. Может ли кто-нибудь мне помочь?

Комментарии:

1. en.wikipedia.org/wiki/Knapsack_problem

2. Одним из подходов к решению «проблемы с рюкзаком» было бы динамическое программирование: en.wikipedia.org/wiki/Dynamic_programming

3. @user2357112 Вы должны преобразовать это в ответ.

Ответ №1:

Решите задачу о сумме подмножеств для вашего набора, используя динамическое программирование.

Затем сканируйте заполненную таблицу от i-й записи до меньших значений, пока не найдете ненулевую запись (т. Е. Такая сумма существует). Это наибольшая сумма подмножеств, которая не превышает заданного значения.