Эта проблема NP-сложная . Чтобы показать это, я сначала переформулирую эту (оптимизационную) проблему в решение проблемы. Затем я переформулирую эту проблему в эквивалентную, из которой довольно просто получить сокращение от задачи окрашивания, которая NP-трудна для любого k ≥ 3 .kk≥3
Краткая формулировка проблемы заключается в следующем:
Учитывая человек и график G, который кодирует их отношения «дарить подарки», найдите минимальное количество поездок, необходимое для того, чтобы все подарки можно было купить без каких-либо сюрпризов.nG
Однако это проблема оптимизации. Класс NP обычно определяется для задач, связанных с решением (где ответом на каждый случай является либо ДА, либо НЕТ). Вариант решения этого:
Учитывая человек и граф G, который кодирует их отношения «дарения», и целое число t , достаточно ли сделать не более t поездок, чтобы купить все подарки, не испортив сюрпризов?nGtt
Я определить проблему нахождения правильного направленного -multicoloringt некоторого графа , как найти функцию многоцветной C : V → P ( C ) , который является надлежащим , где С некоторый набор т «цвета» ( то есть | C | = t ) и P ( C ) - набор мощностей C (то есть набор всех подмножеств CG=(V,E) c:V→P(C)Ct| С| =тп( C)СС). Многоцветная функция правильна тогда и только тогда, когда для каждого ребра имеем c ( u ) ⊈ c ( v ) .( u → v ) ∈ Ec ( u ) ⊈ c ( v )
Я утверждаю , что проблема поход по магазинам эквивалентна задаче о принятии решения о существовании направленного -multicoloringT одного и того же графа .г
Доказательство : если у нас есть правильное направленное многоцветное c для G , где мы переименовываем цвета так, что C = { 1 , … , t }, то рассмотрим последовательность t триплетов T 1 , … , T t , где вершина v отправляется за покупками в поездку T i тогда и только тогда, когда i ∈ c ( v ) . Тогда для любого ребра ( u → v ) ∈ ETсгС= { 1 , … , t }TT1, … , ТTvTяi ∈ c ( v )( u → v ) ∈ E, имеем, что существует такое отключение , что u ∈ T i и v ∉ T i , поскольку c ( u ) ⊈ c ( v ) . Поэтому поездок T i достаточно, чтобы купить все подарки.Tяu ∈ TяV ∉ Tяc ( u ) ⊈ c ( v )Tя
Если у нас есть последовательность поездок , то построим многоцветную функцию c на множестве цветов C = { 1 , … , t }, такую, что c ( u ) = { i ∈ N | u ∈ T i } . Тогда для любого ребра ( u → v ) ∈ E существует такое отключение T i , что u ∈T1, … , ТTсС= { 1 , … , t }c ( u ) = { i ∈ N | u ∈ Tя}( u → v ) ∈ ETя и v ∉ T i (поскольку вы можете купить подарок для v в некоторой поездке), что означает, что i ∈ c ( u ) и i ∉ c ( v ) , поэтому c ( u ) ⊈ c ( v ) . ◻u ∈ TяV ∉ TяUvi ∈ c ( u )i∉c(v)c(u)⊈c(v)□
Нахождение правильного направленного смешивания - в основном странная переформулировка конкретного случая k- окрашивания. Таким образом, я могу показать сокращение полиномиального времени от ( тtk -цветная задача: для заданного неориентированного графаG′=(V′,E′)сначала преобразуйте этот граф в ориентированный графG=(V,E) так, чтобыV=V′и(u→v)∈Eтогда и только тогдакогда(U,V)∈E'или(v,U(t⌊t/2⌋)G′=(V′,E′)G=(V,E)V=V′(u→v)∈E(u,v)∈E′ (другими словами, мы заменяем неориентированные ребра на два направленных ребра).(v,u)∈E′
Рассмотрим наибольшее множество , такое, что не существует a , b ∈ K , a ≠ b , такое, что a ⊂ b . Множество всего подмножества C размера ⌊ t / 2 ⌋ , где t = | C | Вот такой набор. Следовательно, максимальный размер такого подмножества составляет ( тK⊂P(C)a,b∈Ka≠ba⊂bC⌊t/2⌋t=|C| .(t⌊t/2⌋)
Если для G существует правильное смешивание , то существует правильная раскраска, которая использует не более ( ttG неравные элементы изP(C)(*), так что это справедливо ( t(t⌊t/2⌋)P(C) -краска дляG′.(t⌊t/2⌋)G′
Если правильно -окрашивание существует дляG′, тогда существует множествоK⊂P(C),| C| =t, такой что| К| ≥ ( т(t⌊t/2⌋)G′K⊂P(C)|C|=t и не существует такихa,b∈K,a≠b, чтоa⊂b. Таким образом,Gимеет правильное направленноеt-смешивание.|K|≥(t⌊t/2⌋)a,b∈Ka≠ba⊂bGt
Следовательно, это действительное полиномиальное сокращение времени от -покраска существующей проблемы с покупками приt-поездках, что означает, что настоящая проблема с покупками является NP-трудной. Обратите внимание, что настоящая проблема с покупками является NP-полной, так как мы можем легко проверить, позволяет ли данный список из не более чемtпоездок покупать все подарки без неприятных сюрпризов.(t⌊t/2⌋)tt
(*): Если некоторые мультицветные используют больше цветовых наборов, чем максимальные «не подмножественные» мультицветные C ∗ , мы можем «переименовать» C таким образом, чтобы он был надмножеством C ∗ . С остается правильной, поскольку ни один из элементов из C * является смежной с другим элементом из C * является проблемой , и ни один из цветового набора были рядом друг с другом, в оригинале C . Таким образом, без ограничения общности, можно считать C * ⊂ C .CC∗CC∗CC∗C∗CC∗⊂C
Затем обратите внимание, что «переименование» в любое подмножество C ∗ не разрушает ребер между узлами цветовых наборов C ∖ C ∗ , поскольку C ∗ не содержит элементов, которые являются подмножествами другого. Осталось только убедиться, что ребра между C ∖ C ∗ и C ∗ не «портят» раскраску.C∖C∗C∗C∖C∗C∗C∖C∗C∗
Рассмотрим следующее отношение на цвет-множеств в C ∪ C * : два цветовых наборов и B являются подключены , если и только если существует пара вершин через , б , такие , что имеет цвет набора и б цвет- множество В и ( , б ) ∈ E . Это соотношение можно представить неориентированным графом G = ( C ∪ C ∗ , R )RC∪C∗ABa,baAbB(a,b)∈EG=(C∪C∗,R),
Во-первых, мы можем «уменьшить» , заменив любую пару, у которой нет ребра в G , одним набором цветов. Раскраска остается правильной, поскольку изменение двух наборов цветов, которые вообще не являются смежными, в один цвет не приводит к появлению недопустимых краев. В результате мы сократили G до полного графа.C∖C∗GG
Это означает, что если имеет меньшее или равное количество наборов цветов, как | C ∗ | , требуемая окраска существует. В противном случае не существует правильной мультикраски, поскольку C ∗ является наибольшим множеством «не подмножеств», поэтому мы не можем раскрасить эту клику. Следовательно, требуемая разноцветность обязательно существует.G|C∗|C∗
Поскольку полный граф на узлах K n является цветным, если и только если у нас есть хотя бы n цветов, мы имеем, что n людей могут делать покупки друг для друга в t поездках тогда и только тогда, когда ( tnKnnNT. В частности, это означает, что, еслиn≤12870, достаточно всего16поездок. Если нужно купить меньше подарков, больше поездок не понадобится, так что это общий верхний предел для каждого решения.( т⌊ т / 2 ⌋) ≥nn ≤ 1287016
Ниже приведен мой более ранний «ответ», который дает эвристический алгоритм, который не гарантирует получение оптимального значения, но может быть вычислен за полиномиальное время.
Другой способ сформулировать эту проблему - найти покрытие двудольных графов на разбиениях ( S i , T i ) для некоторого ориентированного графа G с n узлами, так что количество разделов (т. е. отключений), здесь m , минимально.С= { ( S1, Т1) , … , ( Sм, Тм) }( Sя, Тя)гNм
Сначала несколько замечаний, частично исходя из других ответов:
- Жадная стратегия, в которой мы выбираем с двудольным графом, где количество ребер, общее с G , максимальна, не приводит к оптимальному решению (сильным контрпримером является полный граф с 6 узлы, где эта стратегия терпит неудачу, независимо от того, какой максимальный двудольный граф выбран.).( Sя, Тя)г6
- Жадная стратегия не оптимальна для произвольных ациклических графов, рассмотрим следующий граф: как
для и для S i = { 1 , 3 , 6 } двудольный граф удаляет 4 ребра, но только { 3 , 5 , 6 } является оптимальным.Sя= { 3 , 5 , 6 }Sя= { 1 , 3 , 6 }4{ 3 , 5 , 6 }
- Любой (оптимальный) жадный алгоритм не может предпочесть размер раздела, выбранный количеству циклов ( любого размера), «удаленных» разделом. Чтобы увидеть это, рассмотрим граф с узлами, где есть один цикл из n узлов, и каждый узел в цикле имеет 2 дополнительных исходящих ребра в направлении 2 дополнительных узлов A , B , которые не имеют исходящих ребер (см. Рисунок ниже для пример, где n = 4 ). Жадный выбор, который предпочитает максимизировать количество ребер за циклы длины nn + 2N22А , Бn = 4Nотправит все вершины в цикле в первой поездке. Это неоптимальный, так как это не удаляет края цикла и просто игнорируя и удаление всех ребер из цикла удаляет все ребра в направлении A , B , а также. Поэтому любой жадный выбор, который предпочитает размер раздела, а не удаление цикла, не является оптимальным.А , БА , Б
Основываясь на этих наблюдениях, я предлагаю следующий жадный выбор: выберите такой, чтобы количество циклов, которые «удаляет» это отключение из G , было максимальным, и в случае связей выберите раздел с максимальным перекрытием с G среди них (то есть смотреть на края не на циклах).( Sя, Тя)гг
Поскольку этот алгоритм не отличается от «базовой» жадной стратегии на ациклических графах (удаление максимального количества ребер в каждой поездке), этот жадный алгоритм не является оптимальным. Тем не менее, интуиция удаления циклов все еще имеет смысл и является улучшением по сравнению с базовой жадной стратегией, поэтому она может быть достойной эвристикой.