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.