c# числа Алгоритм для поиска чисел из списка размера n sum на другое число



найти все элементы массива сумма которых равна заданному числу (4)

Вы описали проблему с рюкзаком , единственное истинное решение - грубая сила. Есть несколько аппроксимационных решений, которые быстрее, но они могут не соответствовать вашим потребностям.

https://ffff65535.com

У меня есть десятичное число (назовем его цель ) и массив других десятичных чисел (давайте назовем элементы массива), и мне нужно найти все комбинации чисел из элементов, которые суммируются с целью.

Я предпочитаю решение в C # (.Net 2.0), но лучший алгоритм может победить независимо.

Ваша подпись метода может выглядеть примерно так:

public decimal[][] Solve(decimal goal, decimal[] elements)

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

Это изменит способ реализации вашего алгоритма (чтобы отсортировать только один раз, а затем пропустить отмеченные элементы), но в среднем повысит производительность.


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

Хотя проблемы NP-полные, они очень «легкие» NP-полные. Алгоритмическая сложность в количестве элементов низка.


Я думаю, что у вас проблема с упаковкой бина на руках (это NP-hard), поэтому я думаю, что единственным решением будет попытка использовать все возможные комбинации, пока вы не найдете тот, который работает.

Изменить: Как указано в комментарии, вам не всегда придется пробовать каждую комбинацию для каждого набора чисел, с которыми вы сталкиваетесь. Тем не менее, любой метод, который вы придумали, имеет наихудшие варианты наборов чисел, где вам придется попробовать каждую комбинацию - или, по крайней мере, подмножество комбинаций, которое растет экспоненциально с размером набора.

В противном случае это не было бы NP-трудным.





np-complete