Excel: Знайти підмножину чисел, які додають до заданої сукупності?


10

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


Загальна інформація: Це приклад неповної проблеми: 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. Додайте обмеження для комірок, які можна змінити. У спадному меню виберіть "бін" (Бінарний). Це обмежує значення цих комірок до 0 (вилучення відповідної комірки A із суми) або 1 (додавання відповідної комірки A до суми).
  8. Клацніть «Розв’язати» та зачекайте. Номери, що входять до підмножини, яку ви шукаєте, матимуть 1 у стовпці B

Приклад


Якщо розв’язання займає багато часу, ви можете допомогти, видаливши рядки, які, очевидно, не працюватимуть (загальна сума в доларах, і лише один ряд має ненульові центи)


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

Ще один простий спосіб знайти важливі рядки - це сортування стовпця B Z-> A, і всі 1 будуть надходити до вершини.


* Додаток solver може бути встановлено за допомогою цих кроків

  1. Натисніть кнопку Microsoft Office і виберіть Параметри Excel.
  2. Клацніть надбудови, а потім у полі Керування виберіть надбудови Excel.
  3. Клацніть Перейти.
  4. У вікні Доступні додатки встановіть прапорець Надбудова Solver та натисніть кнопку ОК. (Якщо надбудова Solver не вказана у вікні Додатки, натисніть кнопку Огляд, щоб знайти надбудову.)
  5. Якщо з'явиться запит, що надбудова Solver наразі не встановлена ​​на вашому комп'ютері, натисніть Так, щоб встановити її.

1
У Excel 2013 потрібно зняти прапорець із пункту "Ігнорувати обмеження цілих чисел" у меню параметрів. В іншому випадку ви отримуєте значення INT не для 0 і 1
Омар Шахін

1
Для того, щоб зробити цю роботу належним чином: 1. Формула в комірці С1 повинна бути сумою ПРОДУКЦІЯ (а не просто сума) 2. Усі клітинки у стовпці В повинні мати нульовий ввід.

Дякую! Для мене старі кроки все ще працюють, але мені подобається краще продукувати, оскільки він не покладається на функцію формули масиву.
Нейт Парсонс

все одно, щоб знайти всі комбінації ... хоча є одне рішення, знайдене solver .. як знайти інші рішення ??? мій масив тут: v = [1100, 1105, 11830, 14790, 2325, 2455, 2555, 2935, 3050, 3150, 3185, 3370, 3475, 350, 3530, 3590, 3680, 3745, 885, 9624] sum = 43029 ... рішення1 = [350, 1100, 2325, 2455, 2555, 2935, 3150, 3745, 9624, 14790], рішення2 = [350, 885, 1100, 1105, 2325, 2455, 2555, 3530, 3590, 3680 , 9624, 11830]
ihightower

2

Існує недорога Excel надбудова SumMatch , яка підкреслить підмножину чисел, які складаються до цільової суми.

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


1
Привіт AIsoft, хороша знахідка. Можливо, наступного разу ви можете додати ще трохи інформації.
nixda

@pnuts Чи помилився? Я не розумію, що ви маєте на увазі під 30 доларів AUD
nixda

@pnuts Ну добре, це хороший момент.
nixda

6
Примітка для себе: 30 доларів AUD = 30 австралійських доларів США. Це не посилання на клітинку Excel [AUD30] з фіксованим стовпцем ....: D
nixda

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