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


10

У нас есть группа из n человек. Нам дают список тех, кто должен покупать подарки для кого в группе. Каждому человеку может понадобиться купить / получить любое количество подарков или, возможно, вообще никаких. В походе по магазинам часть людей путешествует вместе в один и тот же магазин и покупает подарки для всех, кто не присутствует в магазине. Они не могут покупать подарки для кого-то еще в той же поездке по магазинам, потому что тогда это не будет сюрпризом. Человек может отправиться в несколько походов по магазинам. Мы хотим свести к минимуму общее количество покупок, необходимых каждому, чтобы купить все необходимые подарки.

В качестве примера рассмотрим случай, когда есть 5 человек, и каждый должен купить подарки для каждого другого человека в группе. Пусть люди будут пронумерованы от 1 до 5. Это можно сделать за 4 поездки по магазинам, как показано ниже:

  • Поездка 1: 1, 2, 3 за покупками

  • Поездка 2: 1, 4, 5 иди по магазинам

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

  • Поездка 4: 3, 5, шоппинг

Как бы я решил эту проблему? Очевидно, что входные данные могут быть представлены ориентированным графом, но я не знаю, куда идти дальше. Кто-то поднял проблему с biclique cover , но, несмотря на это, не отвечает на этот вопрос.

Мы можем представить входные данные как ориентированный граф на n вершинах, где ребро ( u , v ) означает, что человек u должен купить подарок человеку v . Цель состоит в том, чтобы найти множество bicliques ( S 1 , Т 1 ) , ... , ( S к , Т к ) таким образом, что к является минимальным и множеством ребер Е графа является подмножеством я ( S I × Т яGn(u,v)uv(S1,T1),,(Sk,Tk)kE . Кроме того, при расширении определения биклик на ориентированный граф, биклик ( S i , T i ) содержит только ребра, которые отображают S i в T i . Это отличается от проблемы покрытия biclique тем, что мы не требуем, чтобы каждый biclique был подграфом G (мы не требуем S i × T iE для каждого i ).i(Si×Ti)(Si,Ti)SiTягSя×TяЕя

В частности, я приму ответ, который либо:

  • Демонстрирует, что эта проблема является NP-трудной или
  • Представляет алгоритм полиномиального времени, который точно отвечает на этот вопрос (без аппроксимаций или верхних границ)

Для справки, я нигде не видел этой проблемы, мне просто интересно это для моего собственного любопытства.

Ответы:


2

Эта проблема NP-сложная . Чтобы показать это, я сначала переформулирую эту (оптимизационную) проблему в решение проблемы. Затем я переформулирую эту проблему в эквивалентную, из которой довольно просто получить сокращение от задачи окрашивания, которая NP-трудна для любого k 3 .КК3

Краткая формулировка проблемы заключается в следующем:

Учитывая человек и график G, который кодирует их отношения «дарить подарки», найдите минимальное количество поездок, необходимое для того, чтобы все подарки можно было купить без каких-либо сюрпризов.Nг

Однако это проблема оптимизации. Класс NP обычно определяется для задач, связанных с решением (где ответом на каждый случай является либо ДА, либо НЕТ). Вариант решения этого:

Учитывая человек и граф G, который кодирует их отношения «дарения», и целое число t , достаточно ли сделать не более t поездок, чтобы купить все подарки, не испортив сюрпризов?NгTT

Я определить проблему нахождения правильного направленного -multicoloringT некоторого графа , как найти функцию многоцветной C : V P ( C ) , который является надлежащим , где С некоторый набор т «цвета» ( то есть | C | = t ) и P ( C ) - набор мощностей C (то есть набор всех подмножеств Cгзнак равно(В,Е) с:Вп(С)СT|С|знак равноTп(С)СС). Многоцветная функция правильна тогда и только тогда, когда для каждого ребра имеем c ( u ) c ( v ) .(Uv)Ес(U)с(v)

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

Доказательство : если у нас есть правильное направленное многоцветное c для G , где мы переименовываем цвета так, что C = { 1 , , t }, то рассмотрим последовательность t триплетов T 1 , , T t , где вершина v отправляется за покупками в поездку T i тогда и только тогда, когда i c ( v ) . Тогда для любого ребра ( u v ) ETсгСзнак равно{1,...,T}TT1,...,TTvTяяс(v)(Uv)Е, имеем, что существует такое отключение , что u T i и v T i , поскольку c ( u ) c ( v ) . Поэтому поездок T i достаточно, чтобы купить все подарки.TяUTяvTяс(U)с(v)Tя

Если у нас есть последовательность поездок , то построим многоцветную функцию c на множестве цветов C = { 1 , , t }, такую, что c ( u ) = { i N | u T i } . Тогда для любого ребра ( u v ) E существует такое отключение T i , что u T1,...,TTсСзнак равно{1,...,T}с(U)знак равно{яN|UTя}(Uv)ЕTя и v T i (поскольку вы можете купить подарок для v в некоторой поездке), что означает, что i c ( u ) и i c ( v ) , поэтому c ( u ) c ( v ) . UTяvTяUvяс(U)ic(v)c(u)c(v)

Нахождение правильного направленного смешивания - в основном странная переформулировка конкретного случая k- окрашивания. Таким образом, я могу показать сокращение полиномиального времени от ( тtk -цветная задача: для заданного неориентированного графаG=(V,E)сначала преобразуйте этот граф в ориентированный графG=(V,E) так, чтобыV=Vи(uv)Eтогда и только тогдакогда(U,V)E'или(v,U(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

Если правильно -окрашивание существует дляG, тогда существует множествоKP(C),| C| =t, такой что| К| ( т(tt/2)GKP(C)|C|=t и не существует такихa,bK,ab, чтоab. Таким образом,Gимеет правильное направленноеt-смешивание.|K|(tt/2)a,bKababGt

Следовательно, это действительное полиномиальное сокращение времени от -покраска существующей проблемы с покупками приt-поездках, что означает, что настоящая проблема с покупками является NP-трудной. Обратите внимание, что настоящая проблема с покупками является NP-полной, так как мы можем легко проверить, позволяет ли данный список из не более чемtпоездок покупать все подарки без неприятных сюрпризов.(tt/2)tt


(*): Если некоторые мультицветные используют больше цветовых наборов, чем максимальные «не подмножественные» мультицветные C , мы можем «переименовать» C таким образом, чтобы он был надмножеством C . С остается правильной, поскольку ни один из элементов из C * является смежной с другим элементом из C * является проблемой , и ни один из цветового набора были рядом друг с другом, в оригинале C . Таким образом, без ограничения общности, можно считать C *C .CCCCCCCCCC

Затем обратите внимание, что «переименование» в любое подмножество C не разрушает ребер между узлами цветовых наборов CC , поскольку C ∗ не содержит элементов, которые являются подмножествами другого. Осталось только убедиться, что ребра между CC и C не «портят» раскраску.CCCCCCCCC

Рассмотрим следующее отношение на цвет-множеств в CC * : два цветовых наборов и B являются подключены , если и только если существует пара вершин через , б , такие , что имеет цвет набора и б цвет- множество В и ( , б ) E . Это соотношение можно представить неориентированным графом G = ( CC , R )RCCABa,baAbB(a,b)EG=(CC,R),

Во-первых, мы можем «уменьшить» , заменив любую пару, у которой нет ребра в G , одним набором цветов. Раскраска остается правильной, поскольку изменение двух наборов цветов, которые вообще не являются смежными, в один цвет не приводит к появлению недопустимых краев. В результате мы сократили G до полного графа.CCGG

Это означает, что если имеет меньшее или равное количество наборов цветов, как | C| , требуемая окраска существует. В противном случае не существует правильной мультикраски, поскольку C является наибольшим множеством «не подмножеств», поэтому мы не можем раскрасить эту клику. Следовательно, требуемая разноцветность обязательно существует.G|C|C


Поскольку полный граф на узлах K n является цветным, если и только если у нас есть хотя бы n цветов, мы имеем, что n людей могут делать покупки друг для друга в t поездках тогда и только тогда, когда ( tnKnnnt. В частности, это означает, что, еслиn12870, достаточно всего16поездок. Если нужно купить меньше подарков, больше поездок не понадобится, так что это общий верхний предел для каждого решения.(tt/2)nn1287016


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

Другой способ сформулировать эту проблему - найти покрытие двудольных графов на разбиениях ( S i , T i ) для некоторого ориентированного графа G с n узлами, так что количество разделов (т. е. отключений), здесь m , минимально.C={(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 ). Жадный выбор, который предпочитает максимизировать количество ребер за циклы длины nn+2n22A,Bn=4nотправит все вершины в цикле в первой поездке. Это неоптимальный, так как это не удаляет края цикла и просто игнорируя и удаление всех ребер из цикла удаляет все ребра в направлении A , B , а также. Поэтому любой жадный выбор, который предпочитает размер раздела, а не удаление цикла, не является оптимальным.A,BA,B
    4-тактный

Основываясь на этих наблюдениях, я предлагаю следующий жадный выбор: выберите такой, чтобы количество циклов, которые «удаляет» это отключение из G , было максимальным, и в случае связей выберите раздел с максимальным перекрытием с G среди них (то есть смотреть на края не на циклах).(Si,Ti)GG

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


1
Вы утверждаете: «Если многоцветность существует для G , то эта раскраска использует не более ( ttG неравные элементы изP(C)". Это утверждение неверно. В тривиальном примере 3 несвязанных узловa,b,cсуществует 2-многоцветныйv, гдеv(a)={1},v(b)={2},v(c)={1,2}(tt/2)P(C)a,b,cvv(a)={1},v(b)={2},v(c)={1,2}, Это правильный 2-многоцветный, который использует более чем разных элемента. Вы хотели сказать «ЕслидляGсуществуетt-многоцветность, тоодна такаяраскраска использует не более ( t(21)=2tG неравные элементы изP(C)"?(tt/2)P(C)
Riley

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

Нет, подождите. Он не использует точно элементов, но не более. (tt/2)
Дискретная ящерица

Я могу понять, как это пересмотренное утверждение имеет интуитивный смысл, но можете ли вы доказать это? Возможно, вы могли бы как-то показать, что любое t-многоцветное изображение можно «улучшить», так что все многоцветные элементы являются элементами некоторого множества отвечающего требованию размера, и что не существует a , b K, таких что a b . Ka,bKab
Райли

@ Райли Я не уверен, что ты имеешь в виду, какое утверждение ты хочешь, чтобы я разработал? Я обновил свой ответ так, чтобы в нем было указано, что предлагал ваш оригинальный комментарий. Остальная часть доказательства остается без изменений. Что касается отношения множественной и исходной цветовой проблемы, то ключевая идея заключается в том, что мультикраска может рассматриваться как не имеющая смежных «подмножеств». Поскольку наибольшее «непарное подмножество» подмножества имеет размер ( tP(C) , мы могли бы также рассмотреть этот набор как набор цветов, и мы получим проблему раскраски. (tt/2)
Дискретная ящерица

2

Я могу понять, как свести эту проблему к раскраске графиков , которая дает вам инструмент для решения проблемы (для небольших случаев!), Но еще нет, как уменьшить ее в другом направлении (которое установит NP-твердость).

Основная идея состоит в том, чтобы построить график, который содержит вершину для каждой покупки и границу между любыми двумя покупками, которые не могут происходить в одной поездке; Затем мы собираемся сгруппировать покупки в наименьшее возможное количество групп («поездок»), чтобы никакие две покупки в одной группе не конфликтовали. В частности, если является оригинальным ориентированный граф , в котором ребро U V указывает на то, что человек у необходимо покупать лицо v подарок, а затем создать неориентированный граф H = ( X , Y ) , в котором есть вершина хG=(V,E)uvuvH=(X,Y) для каждого ребраuvвGи (ненаправленного) ребра x u v x v w всякий раз, когдаuvиvwявляются (направленными) ребрами вG(еслиvпокупает некоторыйподарокwво время поездки, то никто может купитьvдара в ту же поездку). Раскраска вершинH- это разбиение необходимых покупок (вершин вH) на поездки (цвета), которые не конфликтуют (разделяют ребро), а раскраска вершин минимального размера занимает наименьшее количество возможных поездок.xuvuvGxuvxvwuvvwGvwvHH

Можно было бы пойти в другом направлении (уменьшить окраску графика или другие проблемы, связанные с NP, к вашей проблеме и тем самым установить его NP-твердость), адаптировав сокращение от 3SAT к раскраске графика (как, например, подробно описано на стр. 10 заметок Джеффа Эриксона ), но я не пытался сделать это сам.


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

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

@ Дискретная ящерица: где в этих примечаниях лекции они дают такое сокращение?

Почему этот ответ принят? Насколько я вижу, он не показывает ни 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 поездок: {{1,2,3},{4,5,6},{1,4},{2,5},{3,6}}, Жадный подход хотел бы, чтобы во второй поездке за покупками было куплено 9 подарков, но в оптимальном решении вторая поездка за покупками покупает 8 подарков (при условии, что это происходит в порядке, указанном выше).
Райли,

Фактически, жадный подход даже не решает проблему 5 человек в 4 походах по магазинам: . {{1,2},{3,4},{5},{1,3},{2,4}}
Райли

-1

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

Вы никогда не хотите поместить родителя и ребенка в одну группу. Вы начинаете со случайным человеком и порядка каждого соответственно, поэтому с ч я л д ( р 1 ) = р 2 , и т.д. Вы положить все р о д д в одну группу, а все р е v е н в другую группу , Для последнего человека p n = p a r e n t ( p 1 )p1child(p1)=p2poddpevenpn=parent(p1), поэтому вы не хотите, чтобы этот человек был в одной группе с . Если n чётно, это не проблема. Иначе, вам нужна еще одна группа, которая может быть просто p n сама по себе, в простейшем случае.p1npn

Этот алгоритм предполагает, что все связаны. Но это не должно быть так. Если есть несколько несвязанных циклов, другими словами, если в какой-то момент, где k ! = n , тогда вы заканчиваете этот круг и начинаете с нового, следуя тому же алгоритму. Если вы не объединяете шансы и четности одного и того же цикла, вы можете объединять отдельные циклы.pk=parent(p1)k!=n

Этот алгоритм заканчивается не более чем 2 раундами (для четного ) и 3 раундами (для нечетного n ).nn


Кажется, что этот подход решает проблему только для случая, когда каждый дает один подарок и получает один подарок, то есть, где граф является перестановкой. Я не уверен, что вопрос хотел задать только об этом особом случае - давайте посмотрим, что ОП говорит по этому поводу.
DW

Это правда, мое решение для задачи, где i , f a n _ i n ( v i ) = f a n _ o u t ( v i ) = 1 . i,fan_in(vi)=fan_out(vi)=1
ilke444

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