Excel: найти подмножество чисел, которые добавляются к заданному итогу?


10

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


Викторины: Это пример проблемы, полной NP: en.wikipedia.org/wiki/Subset_sum_problem
Дейв Л.

Ответы:


25

Это возможно с надстройкой Solver *. Следующие шаги работали для меня в Excel 2007 и 2010.

  1. Назначьте ячейку для хранения результата (C1 для этого примера) - это целевая ячейка и столбец, который Excel может использовать для работы с нуля (B1: B100 для этого примера)
  2. В целевой ячейке введите формулу "= SUMPRODUCT (A1: A100, B1: B100)" (без кавычек). Это вычислит сумму A1 * B1 + A2 * B2 + ... и т. Д.
  3. Выберите Открыть решатель (вкладка «Данные», группа «Анализ»)
  4. Целевая ячейка должна быть очевидной ($ C $ 1 для этого примера)
  5. Для «Равно:» выберите «Значение:» и введите желаемое значение.
  6. В поле «Путем изменения ячеек» введите «$ B $ 1: $ B $ 100» (без кавычек, и может потребоваться инициализировать эти значения равными 0).
  7. Добавьте ограничение к ячейкам, которые можно изменить. В выпадающем меню выберите «bin» (Binary). Это ограничивает значения этих ячеек 0 (удаление соответствующей ячейки A из суммы) или 1 (добавление соответствующей ячейки A к сумме).
  8. Нажмите «Решить» и подождите. Числа, которые являются частью искомого подмножества, будут иметь 1 в столбце B

пример


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


Бонус: Excel может автоматически выделять нужные ячейки, добавляя к ним условное форматирование. Выберите все ячейки, которые вы хотите отформатировать, и в (вкладка «Главная») >> (группа «Стили») >> условное форматирование >> выберите «Новое правило» «Использовать формулу, чтобы определить ячейки для форматирования». В формуле введите '= $ B1 = 1' (без кавычек), что будет иметь значение true, если соответствующая строка в столбце B равна 1. Для формата вы можете добавить все, что захотите (жирный, курсив, зеленая заливка, и т.д).

Другой простой способ найти важные строки - это отсортировать столбец B Z-> A, и все 1 окажутся наверху.


* Надстройка решателя может быть установлена ​​с этими шагами

  1. Нажмите кнопку Microsoft Office, а затем нажмите Параметры Excel.
  2. Нажмите Надстройки, а затем в поле Управление выберите Надстройки Excel.
  3. Нажмите Go.
  4. В поле Доступные надстройки установите флажок Надстройка Solver и нажмите кнопку ОК. (Если надстройка Solver отсутствует в списке доступных надстроек, нажмите кнопку «Обзор», чтобы найти надстройку.)
  5. Если появится сообщение о том, что надстройка Solver в данный момент не установлена ​​на вашем компьютере, нажмите кнопку «Да», чтобы установить ее.

1
В Excel 2013 необходимо снять флажок «Игнорировать целочисленные ограничения» в меню параметров. В противном случае вы получите не INT значения для 0 и 1
Омар Шахин

1
Для правильного выполнения этой работы: 1. Формула в ячейке C1 должна быть sumPRODUCT (а не просто sum) 2. Все ячейки в столбце B должны иметь нулевой ввод в них.

Спасибо! Для меня старые шаги все еще работают, но мне больше нравится sumproduct, потому что он не использует функцию формул массива.
Нейт Парсонс,

в любом случае, чтобы найти все комбинации ... хотя решатель нашел одно решение .. как найти другие решения ??? мой массив здесь: v = [1100, 1105, 11830, 14790, 2325, 2455, 2555, 2935, 3050, 3150, 3185, 3370, 3475, 350, 3530, 3590, 3680, 3745, 885, 9624] sum = 43029 ... solution1 = [350, 1100, 2325, 2455, 2555, 2935, 3150, 3745, 9624, 14790], solution2 = [350, 885, 1100, 1105, 2325, 2455, 2555, 3530, 3590, 3680 , 9624, 11830]
ihightower

2

Существует недорогая надстройка Excel SumMatch , которая будет выделять подмножество чисел, которые в сумме составляют целевую сумму.

введите описание изображения здесь


1
Привет AIsoft, хорошая находка. Может быть, в следующий раз вы можете добавить больше информации.
Никсда

@pnuts Я сделал ошибку? Я не понимаю, что вы имеете в виду под AUD $ 30
nixda

@pnuts А, хорошо, это хороший момент.
Никсда

6
Примечание для себя: 30 австралийских долларов = 30 австралийских долларов США. Это не ссылка на ячейку Excel [AUD30] с фиксированным столбцом ....: D
nixda

1
Ценник является недостатком, как и отсутствие четких инструкций. На самом деле, больше, чем 1 предложение + 1 фотография с сайта продукта.
Нейт Парсонс
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.