Мінімальна кількість покупок для покупки групи людей для придбання подарунків один для одного


10

У нас група людей. Нам надають список тих, хто повинен купувати подарунки для кого в межах групи. Кожній людині може знадобитися придбати / отримати будь-яку кількість подарунків або, можливо, взагалі жодного. Під час походу по магазинах підмножина людей разом подорожує в одному магазині та купує подарунки для всіх, хто не присутній у магазині. Вони можуть не купувати подарунки комусь іншому в одній торговій поїздці, оскільки тоді це не буде сюрпризом. Людина може поїхати в кілька поїздок по магазинах. Ми хочемо мінімізувати загальну кількість покупок, необхідних кожному, щоб придбати всі необхідні їм подарунки.n

Як приклад, розглянемо випадок, коли є 5 людей, і кожен повинен придбати подарунки для кожної іншої людини в групі. Нехай люди пронумеруються від 1 до 5. Це можна зробити за 4 поїздки по магазинах, як показано:

  • Поїздка 1: 1, 2, 3 йдіть по магазинах

  • Поїздка 2: 1, 4, 5 йдіть по магазинах

  • Поїздка 3: 2, 4 йдіть по магазинах

  • Поїздка 4: 3, 5 йдіть по магазинах

Як би я пішов на вирішення цієї проблеми? Очевидно, що вхід може бути представлений спрямованим графіком, але я не знаю, куди звідти піти. Хтось висунув проблему покриття білік , але, хоча це схоже, він не відповідає на це запитання.

Ми можемо розглядати вхід як спрямований графік на вершин, де край означає, що людина повинна купити подарунок для людини . Мета - знайти набір білік S_1 таким, що мінімальний, а крайовий набір графіка є підмножиною . Крім того, розширюючи визначення білікліки на спрямований графік, бікліка містить лише ребра, які відображають доn ( u , v ) u v ( S 1 , T 1 ) , , ( S k , T k ) k E i ( S i × T i ) ( S i , T i ) S i T i G S i × T iE iGn(u,v)uv(S1,T1),,(Sk,Tk)kEi(Si×Ti)(Si,Ti)SiTi. Це відрізняється від проблеми кришки бікліки тим, що ми не вимагаємо, щоб кожен бікілік був підграфом (нам не потрібно для кожного ).GSi×TiEi

Зокрема, я прийму відповідь, що або:

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

Для запису я ніде не бачив цієї проблеми, я просто цікавлюсь цим заради власної цікавості.

Відповіді:


2

Ця проблема є важкою для NP . Щоб показати це, спершу переформулюю цю (оптимізаційну) проблему в проблему рішення. Потім я переформулюю цю проблему в еквівалентну, з якої досить просто отримати скорочення від -барвлення, що є NP-важким для будь-якого .k 3kk3

Коротка постановка проблеми полягає в наступному:

З огляду на осіб та графік який кодує їхні стосунки "дарування подарунків", знайдіть необхідну мінімальну кількість поїздок таким чином, щоб усі подарунки можна було придбати, не зіпсувавши жодних сюрпризів.GnG

Однак це проблема оптимізації. Клас NP, як правило, визначається для задач з рішенням (де відповідь на кожен екземпляр - ТАК чи НІ). Варіантом цього рішення є:

З огляду на осіб та графік що кодує їхні "подарункові" відносини та ціле число , чи не більшість поїздок є достатнім, щоб придбати всі подарунки, не руйнуючи жодних сюрпризів?G t tnGtt

Я визначаю проблему пошуку правильного спрямованого мультиколіруванняt деякого графіка як знаходження багатобарвної функції яка є правильною , де - деякий набір 'кольори' (тобто ) і - набір потужності (тобто множина всіх підмножин ). Багатобарвна функція є правильною тоді і лише тоді, коли для кожного ребра ми маємо, що .G=(V,E) c:VP(C)Ct|C|=tP(C)CC(uv)Ec(u)c(v)

Я стверджую , що проблема похід по магазинах еквівалентна задачі про прийняття рішення про існування спрямованого -multicoloringt одного і того ж графа .G

Доведення : Якщо у нас є правильне спрямоване -мультикольорове для , де ми перейменовуємо такі кольори, що то розглянемо послідовність відключень , де a vertex йде по магазинах у поїздці якщо і лише тоді, коли . Тоді для кожного ребра маємо, що існує такий, що і , оскільки . Тому поїздкиc G C = { 1 , , t } t T 1 , , T t v T i i c ( v ) ( u v ) E T i u T i v T i c ( u ) c ( v ) T itcGC={1,,t}tT1,,TtvTiic(v)(uv)ETiuTivTic(u)c(v)Ti достатні, щоб придбати всі подарунки.

Якщо у нас є послідовність відключень , тоді побудуємо багатоколірну функцію на наборі кольорів таку, що . Тоді для кожного краю існує поїздка така, що і (оскільки можете купити подарунок для в якійсь поїздці), це означає, що і , тому . c C =T1,,Ttcc ( u ) = { i N | u T i } ( u v ) E T i u T i v T i u v i c ( u ) i c (C={1,,t}c(u)={iN|uTi}(uv)ETiuTivTiuvic(u)c ( u ) c ( v ) ic(v)c(u)c(v)

Пошук правильного спрямованого мультиколірування - це в основному дивне переформулювання конкретного випадку -кольорування. Отже, я можу показати скорочення полінома часу з -проблемою забарвлення: Дано ненаправлений графік , спочатку перетворіть цей графік у спрямований графік , такий, що і тоді і тільки тоді, коли або ( іншими словами, ми змінюємо непрямі краї на два спрямовані краї).k ( ttk G=(V,E)G=(V,E)V=V(uv)E(u,v)E(v,u)E(tt/2)G=(V,E)G=(V,E)V=V(uv)E(u,v)E(v,u)E

Розглянемо найбільший набір , такий, що немає , , таким, що . Сукупність усіх підмножини розміром , де, є такий набір. Тому максимальний розмір такого підмножини - .a , b K a b a b C t / 2 t = | C | ( т. звKP(C)a,bKababCt/2t=|C|(tt/2)

Якщо для існує правильне -мультиколірування , то існує власне забарвлення, яке використовує не більше нерівних елементів з (*) , тож це дійсний -кольоровий колір для .G ( ttG P(C) ( t(tt/2)P(C)  G(tt/2)G

Якщо власне -кольорування існує для , то існує безліч , , така що і не існує жодного , , такого що . Отже, має належну спрямовану -мультиколірність. GKP(C)| C| =t| К| ( t(tt/2)GKP(C)|C|=t a,bKababGt|K|(tt/2)a,bKababGt

Отже, це дійсне скорочення поліноміального часу з -кольору до теперішньої проблеми покупок за допомогою поїздок, що означає, що теперішня проблема покупок є важкою для NP. Зауважте, що ця проблема покупок не є повною, оскільки ми можемо легко перевірити, чи даний перелік максимум поїздок дозволяє нам купувати всі подарунки, не руйнуючи сюрпризів. tt(tt/2)tt


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

Потім зауважте, що "перейменування" до будь-якого підмножини не зруйнує краї між вузлами наборів кольорів , оскільки не містить елементів, які є підмножиною іншого. Залишилося лише переконатися, що краї між та не «руйнують» забарвлення.CCCCCCCCCCCCCCCC

Розглянемо наступне відношення на колірних множин в : дві кольорові набори і є з'єднані , якщо і тільки якщо існує пара вершин , такі , що має колір набору і колірної набір і . Це співвідношення може бути представлене непрямим графіком .R A B a , b a A b B ( a , b ) E G = ( CC , R )CCABa,baAbB(a,b)EG=(CC,R)

По-перше, ми можемо 'зменшити' , замінивши будь-яку пару, у якої немає ребра в , на один набір кольорів. Забарвлення залишається належним, оскільки зміна двох наборів кольорів, які зовсім не суміжні, в один і той же колір, не вводить недійсних країв. В результаті ми звели до повного графа.G GCCGG

Це означає, що якщо має меншу або рівну кількість наборів кольорів, як, необхідне фарбування існує. Інакше взагалі не існує належного багатобарвного забарвлення, оскільки є найбільшим набором "без підмножини", тому ми не можемо забарвити цю кліку. Тому необхідна багатобарвність обов’язково існує.| C| CG|C|C


Оскільки повний графік на вузлах може кольори, якщо і тільки якщо у нас є принаймні кольорів, ми маємо, що людей можуть ходити по магазинах подарунки один для одного в поїздках, якщо і тільки тоді, якщо . Це означає, що, якщо , достатньо здійснити лише поїздок. Якщо менше подарунків для купівлі, більше поїздок не знадобиться, тож це загальна верхня межа кожного рішення.K n n n t ( tnKnnntn1287016(tt/2)nn1287016


Нижче наводиться моя попередня «відповідь», яка дає евристичний алгоритм, який не гарантує отримання оптимальності, але може бути обчислений у багаточлен.

Інший спосіб сформулювати цю проблему - знайти покриття двосторонніх графіків на розділах для деякого спрямованого графіка з вузлами , таким, що кількість перегородок (тобто поїздок), тут , мінімальна.( S i , T i ) G n mC={(S1,T1),,(Sm,Tm)}(Si,Ti)Gnm

По-перше, деякі спостереження, частково виходячи з інших відповідей:

  • Жадібна стратегія, де ми вибираємо з двостороннім графіком, де кількість ребер, спільних з є максимальним, не призводить до оптимального рішення (Важливим зустрічним прикладом є повний графік з вузлами, де ця стратегія не вдається, незалежно від того, який максимальний двосторонній графік обраний.)G 6(Si,Ti)G6
  • Жадна стратегія не є оптимальною для довільних ациклічних графіків, врахуйте наступний графік: важкоациклічні І для і для двосторонній графік видаляє ребра, але тільки є оптимальним.S i = { 1 , 3 , 6 } 4 { 3 , 5 , 6 }Si={3,5,6}Si={1,3,6}4{3,5,6}
  • Будь-який (оптимальний) жадібний алгоритм не може віддавати перевагу розміру розділу, обраному за кількість циклів ( будь-якого розміру), 'видалених' розділом. Щоб побачити це, розглянемо графік з вузлами, де є один цикл вузлів, і кожен вузол циклу має додаткові вихідні ребра до додаткових вузлів , які не мають вихідних ребер (див. Рисунок нижче для приклад, де ). Жадібний вибір, який вважає за краще максимізувати кількість ребер за циклами довжини , надішле всі вершини циклу під час першої поїздки. Це неоптимально, оскільки це не видаляє ребер циклу та просто ігноруєn 2 2 A , B n = 4 n A , B A , Bn+2n22A,Bn=4nA,Bі видалення всіх ребер з циклу видаляє всі ребра в напрямку , а також. Тому будь-який жадібний вибір, який віддає перевагу розміру розділу над видаленням циклу, не є оптимальним.A,B
    4-цикл

Виходячи з цих спостережень, я пропоную такий жадібний вибір: Виберіть такий, щоб кількість циклів, яку ця поїздка 'вилучає' з була максимальною, і в разі зв’язків, виберіть розділ з максимальним перекриттям з серед їх (тобто дивіться на краї, а не на цикли).(Si,Ti)GGG

Оскільки цей алгоритм не відрізняється від «основної» жадібної стратегії на ациклічних графіках (видалення максимальної кількості ребер за кожну поїздку), то цей жадібний алгоритм не є оптимальним. Однак інтуїція зняття циклів все ж має сенс і є вдосконаленням у порівнянні з базовою жадібною стратегією, тому це може бути гідною евристикою.


1
Ви заявляєте "Якщо для існує -мультикольорування , то для цього забарвлення використовується не більше нерівних елементів з ". Це твердження хибне. У тривіальному прикладі 3 роз'єднаних вузлів існує 2-багатобарвна , де . Це власне 2-багатобарвне, яке використовує більше, ніж різних елемента. Ви мали на увазі сказати "Якщо для існує -мультиколор , то для одного такого забарвлення використовується не більшеG ( ttG(tt/2)a , b , c v v ( a ) = { 1 } , v ( b ) = { 2 } , v ( c ) = { 1 , 2 } ( 2P(C)a,b,cvv(a)={1},v(b)={2},v(c)={1,2}tG ( t(21)=2tG P(C)(tt/2)нерівні елементи з "?P(C)
Райлі

Дійсно, саме про це я і мав на увазі. Ще один спосіб поглянути на це, що якщо це мінімальний t-різнокольоровий (тобто цей не -мільовий), він використовує точно елементи . Зрозуміло, що наведений вами приклад не є контрприкладом правильного переформулювання. ( t - 1 ) ( tG(t1)(tt/2)
Дискретна ящірка

Не чекайте. Він не використовує точно елементів, але щонайбільше. (tt/2)
Дискретна ящірка

Я можу зрозуміти, як це переглянуте твердження має інтуїтивний сенс, але чи можете ви довести це? Можливо, ви могли б якось показати, що будь-яке т-багатобарвне може бути «вдосконалене», так що всі різнокольорові кольори є елементами деякого набору відповідає вимозі розміру, і що таких , що . a , b K a bKa,bKab
Райлі

@Riley Я не впевнений, що ти маєш на увазі, яке твердження ти хочеш розробити? Я оновив свою відповідь так, що в ній сказано, що запропонував ваш оригінальний коментар. Решта доказів залишається без змін. Що стосується співвідношення багатокористувацької та оригінальної кольорової проблеми, ключовою ідеєю є те, що багатобарвне зображення можна розглядати як таке, що не має суміжних "підмножин". Оскільки найбільша підмножина підмножини має розмір , ми можемо також розглянути цей набір як набір кольорів, і ми отримаємо проблема фарбування. ( tP(C)(tt/2)
Дискретна ящірка

2

Я бачу, як звести цю проблему до Graph Coloring , який дає вам інструмент для вирішення проблеми (для невеликих примірників!), Але ще не як зменшити в іншому напрямку (який би встановив твердість NP).

Основна ідея полягає у створенні графіка, що містить вершину для кожної покупки та межу між будь-якими двома покупками, які не можуть відбутися в одній поїздці; Потім ми розглядаємо групування покупок на найменшу можливу кількість груп ("поїздки"), щоб жодна дві покупки в одній групі не конфліктували. Зокрема, якщо - це оригінальний спрямований графік, у якому ребро вказує, що людині потрібно придбати особу подарунок, тоді створіть непрямий графік у якому є вершина для кожного краю у та (непрямого) краю кожного разуу V U V Н = ( X , У ) х U V U V G х U V х V ш у v v ш G V ш VG=(V,E)uvuvH=(X,Y)xuvuvGxuvxvwuv і обидва (надіслана) ребра в (якщо купує певний в дар під час поїздки, то ніхто не може купити подарунка в протягом цієї ж поїздки). Забарвлення вершини - це розділ необхідних покупок (вершин у ) на поїздки (кольори), які не конфліктують (ділять край), а забарвлення вершин мінімального розміру займає найменші можливі відключення.vwGvwvHHH

Можливо, можна перейти в інший бік (зменшити розфарбовування графіка або якусь іншу проблему, пов'язану з NP, до вашої проблеми, і тим самим встановити її твердість NP), пристосувавши зменшення від 3SAT до графічного забарвлення (як, наприклад, детально на стор. 10 приміток Джеффа Еріксона ), але я сам цього не робив.


Ця відповідь геніальна; це просто те, що я шукав. Аналізуючи часову складність цього алгоритму, існує максимум вершин (подань) та ребра. Коли я шукаю алгоритм розфарбовування графіка, все, що я знаходжу, - це для графіка з вершинами. Чи є в цьому випадку більш ефективний алгоритм, оскільки на кількості ребер є поліноміальна верхня межа? ( 2 n - 3 ) ( n 2 - n )n2n O(2nn)n(2n3)(n2n)2O(2nn)n
Райлі

1
@ Riley Мабуть ні, вирішивши -кольорову здатність, для графіка з максимальним ступенем вже NP-важкий. Див. Ці [конспекти лекцій] (www-sop.inria.fr/members/Frederic.Havet/Cours/coloration.pdf) щодо скорочення від 3-SAT до графіків з максимальним ступенем 3.k 3 3kk33
Дискретна ящірка

@ Дискретна ящірка: Де в цих конспектах лекцій вони зменшуються?

Чому ця відповідь прийнята? Наскільки я бачу, він не показує твердості NP, ані "найоптимальнішого" алгоритму, ані навіть ефективного алгоритму.
Дискретна ящірка

1
@Discretelizard Добре. Я не думав, що питання означає, що я шукаю алгоритм часу P, особливо з урахуванням можливості, що ця проблема є важкою для NP. Але я можу зробити це більш чітким у первісному запитанні. Я відзначу цю відповідь правильною і додаю банус на 100 балів (виявляється, другий повинен бути 100, якщо за тим самим питанням, але я готовий запропонувати, тому що вони просто уявні інтернет-точки, правда? :)) знову ж таки всім, хто може або показати цю проблему, важко NP, АБО знайдіть алгоритм багаточленного часу, який її вирішує.
Райлі

0

Це проблема, в якій я б дуже хвилювався, якби мій начальник попросив мене реалізувати алгоритм, який гарантовано знайде оптимальне рішення в розумний час.

Щоб знайти не обов'язково оптимальне рішення: Враховуючи будь-який набір людей і подарунки, які можна придбати, ми можемо порахувати, скільки подарунків може придбати група людей у ​​шопінгу. Тому почніть з порожньої групи (яка може придбати 0 подарунків). Для кожної людини, яка не входить до групи, визначте, скільки подарунків можна придбати, якщо цю людину додати до групи. Якщо є людина, яку ми можемо додати, не зменшуючи кількість подарунків, виберіть навмання один із тих, що збільшують кількість подарунків, куплених на максимальну суму, поки додавання будь-якої особи не зменшить кількість придбаних подарунків. Потім зробіть цю похід по магазинах і почніть все спочатку, поки не будуть придбані всі подарунки.

Я повторю кілька разів, підбираючи різних людей «навмання» у випадку, якщо знайдеться краще рішення.

У прикладі, п'ять людей, які мають купити подарунок один одному, це знаходить рішення в чотирьох поїздках, що є оптимальним; якби ми не додали людей до поїздки, які залишають без змін кількість подарунків, не покращуючи її, ми мали б п'ять поїздок. А на 6 людей потрібно 5 поїздок.


Отже, іншими словами, ви жадібно вибираєте походи по магазинах відповідно до того, скільки подарунків було б куплено. Чи можете ви довести, що ця процедура обов'язково призводить до мінімально можливої ​​кількості покупок? Якщо це так, ви працювали на прикладі 6 осіб неправильно. 6 людей потребують лише 4 похідних по магазинах: . {{1,2,3},{1,4,5},{2,4,6},{3,5,6}}
Райлі

Абсолютно ніяких доказів. Жадібний алгоритм + вибір різних випадкових виборів трохи покращить ваші шанси, але не зробить 4 поїздки.
gnasher729

Я перевірив твердження, що проблема жадібна, і вона не вдається. Навіть якщо ви перевіряєте кожну можливу подорож по магазинах, а не додаєте людей по черзі, все одно ви отримуєте 5 поїздок: . Жадібний підхід хотів би, щоб друга поїздка по магазинах придбала 9 подарунків, але в оптимальному варіанті друга поїздка за покупками купує 8 подарунків (припустимо, що це йде в порядку, перерахованому вище). {{1,2,3},{4,5,6},{1,4},{2,5},{3,6}}
Райлі

Насправді жадібний підхід навіть не вирішує випадку 5 людей у ​​4-х поїздках по магазинах: . {{1,2},{3,4},{5},{1,3},{2,4}}
Райлі

-1

Припустимо, що ви замовляєте людей на основі того, кого вони отримують від (батька) та кого вони віддають (дитині). Оскільки кожен дарує один подарунок і отримує один подарунок, функція батько-дитина - це один на один.

Ніколи не хочеш ставити батька та дитину в одну групу. Ви починаєте з випадкової особи і замовляєте всіх відповідно, тому і т. Д. Ви ставите всі в одну групу, а всі в іншу групу. Для останньої особи , тому ви не хочете, щоб ця людина була в одній групі з . Якщо рівне, це не проблема. Крім того, вам потрібна одна додаткова група, яка може бути просто сама по собі, у найпростішому випадку. c h i l d ( p 1 ) = p 2 pp1child(p1)=p2poddpevenpn=parent(p1)p1npn

Цей алгоритм передбачає, що всі підключені. Але це не потрібно. Якщо є кілька відключених циклів, іншими словами, якщо в якийсь момент де , тоді ви закінчите це коло і почніть з нового, дотримуючись того ж алгоритму. До тих пір, поки ви не з’єднаєте непарність і рівності одного і того ж циклу, ви можете об'єднати відключені цикли.pk=parent(p1)k!=n

Цей алгоритм закінчується щонайменше 2 раундами (для парних ) і 3 раундами (для непарних ).nnn


Здається, цей підхід вирішує проблему лише для випадку, коли кожен дає один подарунок і отримує один подарунок, тобто там, де графік є перестановкою. Я не впевнений, що це питання означало поставити лише про той особливий випадок - давайте подивимось, що ОП має сказати з цього приводу.
DW

Це правда, моє рішення стосується проблеми, коли . i,fan_in(vi)=fan_out(vi)=1
ilke444

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