Я ищу алгоритм, который может принимать два набора целых чисел (как положительных, так и отрицательных) и находить в каждом из них подмножества с одинаковой суммой.
Эта проблема аналогична проблеме суммы подмножеств , за исключением того, что я ищу подмножества с обеих сторон.
Вот пример:
Список А {4, 5, 9, 10, 1}
Список B {21, 7, -4, 180}
Так что единственное совпадение здесь:
{10, 1, 4, 9} <=> {21, 7, -4}
Кто-нибудь знает, существуют ли алгоритмы для решения подобных проблем?
Пока что единственное решение, которое у меня есть, - это метод грубой силы, который пробует каждую комбинацию, но она выполняется в экспоненциальном времени, и мне пришлось жестко ограничить количество элементов, которые необходимо учитывать, чтобы избежать слишком длительного .
Единственное другое решение, которое я могу придумать, - это запустить факториал в обоих списках и искать там равенства, но это все еще не очень эффективно и экспоненциально дольше по мере увеличения списков.