Answers:
我认为这个问题很难解决。我尝试从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 i)和 ˚F (ˉ X我)= 我+ v + ķ或 ˚F (ˉ X我)= 我和 ˚F (X 我)= 我+ v + ķ。对于每个子句顶点,令 S = { v + 1 ,… ,v + k ,2 v + k + 1 ,…,因此子句顶点中的 k个为``small''。
现在,CNF有一个分配,其中且仅当您的问题可以为上述实例解决时,至少子句才为false。MinSAT问题正是为了测试CNF公式φ是否具有至少使k个子句为假的赋值,因此这表明您的问题是NP-难的。
为了帮助您了解本次减持,这里的直觉:小标签()对应于真值假,大标签(v + ķ + 1 ,... ,2 v + ķ)对应于真正。对于文字-顶点的约束确保每个X 我是True或False并且¯ X 我具有相反的真理价值。边确保如果任何文字为True,则包含该文字的所有子句-顶点也会被赋值为True。(相反,如果子句中的所有文字都分配为False,则此图结构允许将子句顶点分配为False或True。)最后,选择可确保将k个子句顶点分配为False和。其中c - k个分配为True。因此,如果该图有一个有效的拓扑排序,则对变量进行赋值,使得至少φ个子句中的k个false(分配给所有False的所有子句顶点,以及分配给True的所有子句顶点)。相反,如果对变量的赋值至少使φ的个子句为假,则此图存在有效的拓扑排序(我们以明显的方式为文字-顶点填充标签;对于φ的每个子句为真,我们为其对应的子句顶点指定一个对应于True的标签;其他子句顶点可以接收与任意真值对应的标签。
一个简单的观察是,如果对所有X,那么这个问题是在多项式时间解,还原成2SAT。
就是这样。引入变量每个顶点X和每个我使得我∈ 小号(X )。对于每对X ,ÿ顶点的,如果有从一个路径X到Ý,我们得到了一些约束:如果我∈ 小号(X ),Ĵ ∈ 小号(Ý ),并且我> Ĵ,那么我们得到的约束¬ v X ,我。双射为我们提供了另一套限制:每对 X ,ÿ与顶点的 X ≠ Ÿ,如果我∈ 小号(X )和我∈ 小号(Ÿ ),我们添加 ¬ v X ,我 ∨ ¬ v ÿ ,我。最后,必须为每个顶点分配一个标签的要求为我们提供了另一组约束:对于每个 x,如果 S (
我意识到这种观察对您的特定情况没有帮助。对于那个很抱歉。