Я имею дело с проблемой, которая является вариантом задачи с подмножеством суммы, и я надеюсь, что дополнительное ограничение может облегчить его решение, чем классическая проблема с суммой подмножества. Я искал проблему с этим ограничением, но мне не удалось найти хороший пример с соответствующим алгоритмом ни в StackOverflow, ни через поиск в других местах.
Проблема:
Предположим, у вас есть два списка положительных чисел A1, A2, A3 ... и B1, B2, B3 ... с одинаковым количеством элементов N. Есть две суммы Sa и Sb. Задача состоит в том, чтобы найти одновременное множество Q, где | sum (A {Q}) - Sa | <= эпсилон и | сумма (B {Q}) - Sb | <= эпсилон. Итак, если Q равен {1, 5, 7}, то A1 + A5 + A7 - Sa <= epsilon и B1 + B5 + B7 - Sb <= epsilon. Эпсилон - сколь угодно малая положительная постоянная. </p>
Теперь я мог бы решить это как две совершенно разные задачи о подмножестве сумм, но снятие ограничения одновременности приводит к возможности ошибочных решений (где Qa! = Qb). Я также подозреваю, что дополнительное ограничение должно облегчить эту проблему, чем две проблемы полного NP. Я хотел бы решить экземпляр с 18+ элементами в обоих списках чисел, и большинство алгоритмов подмножества сумм имеют длительное время выполнения с таким количеством элементов. Я исследовал псевдополиномиальный алгоритм динамического программирования во время выполнения, но в этом есть проблемы: а) скорость зависит от небольшой битовой глубины списка чисел (что не обязательно относится к моему экземпляру) и б) он делает не принимать во внимание ограничение одновременности.
Какой-нибудь совет, как использовать ограничение одновременности для сокращения времени выполнения? Есть ли подход динамического программирования, который я мог бы использовать, чтобы учесть это ограничение?