位置受限的拓扑排序的复杂性


15

我得到个顶点的DAG作为输入,其中每个顶点都另外加上了一些。GnxS(x){1,,n}

甲拓扑排序的是一个双射从顶点到,使得对所有,,如果有从一个路径到在然后。我想决定是否存在的拓扑排序,这样对于所有,。GfG{1,,n}xyxyGf(x)f(y)Gxf(x)S(x)

这个决策问题的复杂性是什么?

[注意:显然这是在NP中。如果查看允许的顶点/位置对的图,并且成对之间的无向边会因为违反顺序而发生冲突,那么您会得到一个不连续的图,每个图最多要选择一对,每个图最多要选择一对位置,每个顶点最多一对-似乎与3维匹配有关,但我看不出使用此特定问题的附加结构是否仍然困难。

Answers:


9

我认为这个问题很难解决。我尝试从MinSAT得出一个简化。在MinSAT问题中,我们获得了CNF,我们的目标是最大程度地减少满意条款的数量。此问题是NP难题,请参见例如http://epubs.siam.org/doi/abs/10.1137/S0895480191220836?journalCode=sjdmec

将顶点分为两组-有些将代表文字,其余的将从句,因此其中v是CNF的变量数(通常由n表示),而c是从句的数目。将每个文本顶点的边指向发生它的子句顶点。为将x i表示为{ i i + v + k }的文字-顶点定义S(其中k是任意参数),所以f x in=2v+cvncSxi{i,i+v+k}k ˚F ˉ X= + v + ķ ˚F ˉ X= ˚F X = + v + ķ。对于每个子句顶点,令 S = { v + 1 v + k 2 v + k + 1 f(xi)=if(x¯i)=i+v+kf(x¯i)=if(xi)=i+v+k,因此子句顶点中的 k个为``small''。S={v+1,,v+k,2v+k+1,,n}k

现在,CNF有一个分配,其中且仅当您的问题可以为上述实例解决时,至少子句才为false。MinSAT问题正是为了测试CNF公式φ是否具有至少使k个子句为假的赋值,因此这表明您的问题是NP-难的。kφk

为了帮助您了解本次减持,这里的直觉:小标签()对应于真值假,大标签(v + ķ + 1 ... 2 v + ķ)对应于真正。对于文字-顶点的约束确保每个X 是True或False并且¯ X 1,2,,v+kv+k+1,,2v+kxixi¯具有相反的真理价值。边确保如果任何文字为True,则包含该文字的所有子句-顶点也会被赋值为True。(相反,如果子句中的所有文字都分配为False,则此图结构允许将子句顶点分配为False或True。)最后,选择可确保将k个子句顶点分配为False和。其中c - k个分配为True。因此,如果该图有一个有效的拓扑排序,则对变量进行赋值,使得至少φ个子句中的k个kkckkφfalse(分配给所有False的所有子句顶点,以及分配给True的所有子句顶点)。相反,如果对变量的赋值至少使φ的个子句为假,则此图存在有效的拓扑排序(我们以明显的方式为文字-顶点填充标签;对于φ的每个子句为真,我们为其对应的子句顶点指定一个对应于True的标签;其他子句顶点可以接收与任意真值对应的标签。kφφ


感谢您的回答!我想了解你的草图。您介意解释是什么吗?k
a3nm

1
@ a3nm:k是为MinSAT输入指定的参数。
domotorp 2013年

1
@Marzio:SAT不等于MinSAT,其中,就像在后一个问题中一样,我们要求所有子句都为假。您φ不具有的所有条款虚假的分配。当然,这并不能证明我的减缩是正确的……k=|c|ϕ
domotorp 2013年

这是一个华丽的还原!@ a3nm,我建议对答案进行编辑以更详细地解释domotorp的优雅还原;如果获得批准,希望它将帮助您更清楚地理解这些想法。
DW

@domotorp:是的,我完全错过了MinSAT是什么。很好的减少!
Marzio De Biasi 2013年

2

请注意,如果通过允许为任意(不一定是双射的)来放松问题,则它将变为多项式。该算法的操作类似于拓扑排序:对顶点进行一次编号,并维护其邻居中已编号的未编号顶点的集合U。只要有可能,你选择了一个顶点X ü并与数最小的元素小号X 比其同邻国的数量更大。不难看出实例G S 具有解决方案,前提是先前的算法在G S 上运行fUxUS(x)(G,S)以所有折点编号结束。(G,S)


公平的说,这种放松意味着贪婪的启发式工作,甚至在不是顶点数而是任意值的情况下也是如此。我们是否同意,在后一种情况下,当内射性和外射性不再相等时,您需要放松两者(而不仅仅是一个),以使贪婪的启发式方法起作用?n
a3nm

2

一个简单的观察是,如果对所有X,那么这个问题是在多项式时间解,还原成2SAT。|S(x)|2x

就是这样。引入变量每个顶点X和每个使得小号X 。对于每对X ÿ顶点的,如果有从一个路径XÝ,我们得到了一些约束:如果小号X Ĵ 小号Ý ,并且> Ĵ,那么我们得到的约束¬ v X vx,ixiiS(x)x,yxyiS(x)jS(y)i>j。双射为我们提供了另一套限制:每对 X ÿ与顶点的 X Ÿ,如果小号X 小号Ÿ ,我们添加 ¬ v X ¬ v ÿ 。最后,必须为每个顶点分配一个标签的要求为我们提供了另一组约束:对于每个 x,如果 S ¬vx,i¬vy,jx,yxyiS(x)iS(y)¬vx,i¬vy,ixS(x)={i,j}vx,ivx,j|S(x)|2x

我意识到这种观察对您的特定情况没有帮助。对于那个很抱歉。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.