Найти наибольшее подмножество, которое суммирует в ноль в Excel или Access (VBA, SQL или что-нибудь) - PullRequest
1 голос
/ 05 августа 2011

У меня есть столбец чисел в Excel, с плюсами и минусами. Это бухгалтерская книга. Мне нужно устранить ячейки, которые суммируются до нуля. Это означает, что я хочу удалить подмножество, поэтому остальная часть элемента не может сформировать любое подмножество для суммирования в ноль Я думаю, что эта проблема заключается в том, чтобы найти наибольшую сумму подмножеств. Под удалением / удалением я подразумеваю пометить их в excel.

Например: набор {1, -1,2, -2,3, -3,4, -4,5, -5,6,7,8,9},

Мне нужна функция, которая находит подмножество {1, -1,2, -2,3, -3,4, -4,5, -5} и отмечает каждый элемент.

Ответы [ 2 ]

1 голос
/ 05 августа 2011

Это предложение может быть немного сложным, но оно должно быть в состоянии справиться с широким классом проблем - например, когда один кредит может быть обнулен более чем одним дебетом (или наоборот) - если это то, что ты хочешь. Как вы и просили, он в буквальном смысле найдет наибольшее подмножество с нулевой суммой:

  1. Введите свои цифры в столбце A, скажем, в диапазоне A1: A14.

  2. В столбце B рядом с вашими цифрами введите 0 в каждую из ячеек B1: B14. В конечном итоге эти ячейки будут установлены в 1, если выбрано соответствующее число в столбце A, или в 0, если это не так.

  3. В ячейку C1 введите формулу =A1*B1. Скопируйте формулу в ячейки C2: C14.

  4. В нижней части столбца B в ячейку B15 введите формулу =SUM(B1:B14). Эта формула вычисляет количество выбранных вами чисел.

  5. Внизу столбца C в ячейку C15 введите формулу =SUM(C1:C14). Эта формула вычисляет сумму выбранных вами чисел.

  6. Активируйте Надстройку Solver и используйте ее для следующих шагов.

  7. Установите цель максимизировать значение ячейки $ B $ 15 - другими словами, максимизировать количество выбранных вами чисел (то есть, чтобы найти наибольшее подмножество).

  8. Установите следующие три ограничения, чтобы требовать, чтобы значения в ячейках B1: B14 (которые указывают, выбрано ли каждое из ваших чисел) равны 0 или 1: a) $B$1:$B$14 >= 0, b) $B$1:$B$14 <= 1 и с) $B$1:$B$14 = integer.

  9. Установите следующее ограничение, чтобы к выбранным числам можно было добавить до 0: $C$15 = 0.

  10. Используйте надстройку Solver для решения проблемы.

Надеюсь, это поможет.

0 голосов
/ 10 августа 2011

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

Вот почему. Возьми этот набор чисел:

{ -9, -5, -1, 6, 7, 10 }

Существует 64 возможных подмножества - включая пустой набор - и из этих трех нулевые суммы:

{ -9, -1, 10 }, { -5, -1, 6 } & { }

Существует два возможных "самых больших" подмножества с нулевой суммой.

Если вы удалите один из них, вы получите одно из:

{ -5, 6, 7 } or { -9, 7, 10 }

Ни одна из этих сумм к нулю, но нет правила, чтобы определить, какое подмножество выбрать.

Вы можете решить удалить «объединенный» набор подмножеств с нулевой суммой. Это оставит вас с:

{ 7 }

Но имеет ли это смысл в вашем бухгалтерском пакете?

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

Я не уверен, что на ваш вопрос можно ответить, если вы не опишите ваши требования более четко.

...