这个问题很困难。为了说明这一点,我首先将这个(优化)问题重新构成为决策问题。然后,我重新制定这个问题成等价的一个,从它是相当简单的获得从一个还原ķk -coloring问题,这是NP-hard的任何ķ ≥ 3k≥3。
问题的简短表述如下:
给定nn个人和一个编码其“馈赠”关系的图表GG,找到所需的最少行程,以便可以购买所有礼物而不会造成任何意外。
但是,这是一个优化问题。NP类通常是为决策问题定义的(每个实例的答案为是或否)。一个决策变体是:
给定n个人和一个编码其“馈赠”关系和整数t的图形G,最多进行t次旅行就足以购买所有礼物而不会破坏任何惊喜?nGtt
我定义查找的问题正确定向吨 -multicoloringt一些图的G ^ = (V ,ê )作为查找多色功能Ç :V → P(C ^ )这是适当的,其中Ç是某组吨 “颜色”(即| C ^ | = 吨)和P(C ^ )是功率设定的ç(即该组的所有子集的çG=(V,E) c:V→P(C)Ct|C|=tP(C)CC)。多色的功能是正确的,当且仅当每一个边缘(ü → v )∈ Ë,我们有Ç (ü )⊈ Ç (v )。(u→v)∈Ec(u)⊈c(v)
我声称购物旅行问题等同于确定相同图形的有向彩吨t存在的问题。 ģG
证明:如果我们有一个适当的定向 -multicoloring为,在那里我们重新命名的颜色,使得然后考虑该序列的跳闸,其中一个当且仅当顶点在旅行购物。然后,对于每个边,由于,所以存在一个行程,使得和。因此,行程吨Ç ģ c ^ = { 1 ,... ,吨} 吨Ť 1,... ,Ť 吨 v Ť 我我∈ Ç (v )(Û → v )∈ Ë Ť 我 Ü ∈ Ť 我 v ∉ Ť 我 Ç (Û )⊈ ç (v )Ť 我tcGC={1,…,t}tT1,…,TtvTii∈c(v)(u→v)∈ETiu∈Tiv∉Tic(u)⊈c(v)Ti 足以购买所有礼物。
如果我们有行程,则在颜色集上构造多色函数,使得。然后,对于每一个边缘,存在一个行程使得和(因为可以买本为一些跳闸),这意味着,和,因此。Ť 1,... ,Ť 吨 Ç Ç = { 1 ,... ,吨} Ç (Û )= { 我∈ Ñ | ü ∈ Ť 我 } (Ú → v )∈ Ë Ť 我 Ü ∈ Ť 我 v ∉ Ť 我 Ü v 我∈ Ç (Û )我∉ Ç (T1,…,TtcC={1,…,t}c(u)={i∈N|u∈Ti}(u→v)∈ETiu∈Tiv∉Tiuvi∈c(u)v )Ç (Û )⊈ Ç (v )◻i∉c(v)c(u)⊈c(v)□
找到合适的有向色着色基本上是对色特定情况的一种怪异的重新表述。因此,我可以显示着色问题的多项式时间减少:给定无向图,首先将该图转换为有向图,使得和且仅当或(换句话说,我们将无向边更改为两个有向边。吨ķ (吨tk⌊ 吨/ 2 ⌋) ģ'=(V',È')ģ=(V,ê)V=V'(Ú→v)∈È(Û,v)∈È'(v,Û)∈Ë'(t⌊t/2⌋)G′=(V′,E′)G=(V,E)V=V′(u→v)∈E(u,v)∈E′(v,u)∈E′
考虑最大集合,使得不存在,,因此。的所有子集的集合,大小为,其中,就是这样一套。因此,此类子集的最大大小为。ķ ⊂ P(Ç )一个,b ∈ ķ 一个≠ b 一个⊂ b ç ⌊ 吨/ 2 ⌋ 吨= | C | (吨K⊂P(C)a,b∈Ka≠ba⊂bC⌊t/2⌋t=|C|⌊ 吨/ 2 ⌋)(t⌊t/2⌋)
如果对于存在适当的多色,则存在一种适当的着色,其使用的来自(*)的不相等元素,因此这是有效的 -为着色。吨ģ (吨tG⌊ 吨/ 2 ⌋) P(Ç)(吨(t⌊t/2⌋) P(C) ⌊ 吨/ 2 ⌋) ģ'(t⌊t/2⌋)G′
如果对于存在适当的着色,则存在一个集合,,使得并且,中不存在任何,因此。因此,具有适当的有向多色。(吨⌊ 吨/ 2 ⌋) ģ'ķ⊂P(C ^)| C| =t| K| ≥( t(t⌊t/2⌋)G′K⊂P(C)|C|=t⌊ 吨/ 2 ⌋)一个,b∈ķ一个≠b一个⊂bģ吨|K|≥(t⌊t/2⌋)a,b∈Ka≠ba⊂bGt
因此,这是从着色到行程的当前购物问题的有效多项式时间减少,这意味着当前的购物问题是NP难的。请注意,当前的购物问题是NP完全的,因为我们可以轻松地验证给定的最多次旅行清单是否可以使我们购买所有礼物而不会破坏惊喜。(吨⌊ 吨/ 2 ⌋)吨吨(t⌊t/2⌋)tt
(*):如果某些多色比最大的“非子集”多色使用更多的颜色集,我们可以“重命名”这样它是的超集。保持适当的,因为没有一个元素从相邻于从一个不同的元素是一个问题,并且没有颜色组被相邻-其他在原始。因此,在不失一般性的前提下,我们可以假定。c ^ 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 一个甲b 乙(一,b )∈ Ë ģ = (ç ∪ Ç *,- [R )RC∪C∗ABa,baAbB(a,b)∈EG=(C∪C∗,R)
首先,我们可以通过用单个颜色集替换中没有边的任何对来'减少'。着色是正确的,因为将根本不相邻的两个色集更改为相同的颜色不会引入任何无效的边缘。结果,我们将简化为一个完整的图。C ∖ C ∗ G GC∖C∗GG
这意味着如果与具有较少或相等的颜色集,则存在所需的颜色。否则,由于是最大的“非子集”集,因此根本不存在正确的多色设置,因此我们无法为该集团着色。因此,必然存在所需的多种颜色。G | C * | C *G|C∗|C∗
作为对完全图节点是颜色能够当且仅当我们至少有颜色,我们有人可以去对方逛街呈现跳闸当且仅当。这尤其意味着,如果,则仅进行次跳闸就足够了。如果要购买的礼物较少,则不需要更多的旅行,因此这是每种解决方案的普遍上限。n K n n n t ( tnKnnnt⌊ 吨/ 2 ⌋) ≥ÑÑ≤1287016(t⌊t/2⌋)≥nn≤1287016
下面是我较早的“答案”,它给出了一种启发式算法,该算法不能保证获得最优值,但是可以在多项式时间内进行计算。
解决此问题的另一种方法是,针对具有节点的某些有向图,在分区上找到二部图的覆盖,因此分区(即行程)的数量(此处)最小。C = { (S 1,T 1),… ,(S m,T m)} (S i,T i)G n mC={(S1,T1),…,(Sm,Tm)}(Si,Ti)Gnm
首先,一些观察,部分来自其他答案:
- 贪婪策略选择了一个且带有二分图的图,其中与共有的边的数量最大,这并不会导致最优解(一个很强的反例是具有节点的完整图,无论选择了哪个最大二部图,该策略都会失败。)(S i,T i)G 6(Si,Ti)G6
- 对于任意非循环图,贪婪策略不是最佳选择,请考虑以下图:
对于和,二部图都删除了边,但仅是最佳的。小号我 = { 3 ,5 ,6 } š 我 = { 1 ,3 ,6 } 4 { 3 ,5 ,6 }Si={3,5,6}Si={1,3,6}4{3,5,6}
- 任何(最佳)贪婪算法都不能比分区“删除” 的周期数(任何大小)更喜欢所选分区的大小。要看到这一点,请考虑具有节点的图,其中有一个节点的周期,并且该周期中的每个节点都具有额外的输出边缘,朝向其他节点没有输出边缘(请参见下图)的示例)。倾向于在长度为循环中最大化边的数量的贪婪选择将在第一次行程中发送循环中的所有顶点。这是次优的,因为它不会删除循环的任何边沿,而只是忽略n + 2 n 2 2 A ,B n = 4 n A ,B A ,Bn+2n22A,Bn=4nA,B并且从循环中删除所有边沿也会同时删除朝向所有边沿。因此,任何优先选择分区大小而不是删除循环的贪婪选择都不是最佳选择。A,B
基于这些观察,我提出以下贪婪选择:挑选这样,即,此行从“中移除了”循环的量是最大的,并且在联系的情况下,选择一个与最大重叠分区之间他们(即不看周期的边缘)。(S i,T i)G G(Si,Ti)GG
由于此算法与非循环图上的“基本”贪心策略(在每次旅行中删除最大数量的边)没有什么不同,因此该贪心算法不是最佳的。但是,删除循环的直觉仍然有意义,并且是对基本贪婪策略的改进,因此它可能是不错的启发式方法。