除非NP位于coNP / poly中,否则问题就不会具有多项式内核。我们论文的交叉合成技术以非平凡的方式应用。
让我展示一下经典的“顶点覆盖”问题是如何与k-FLIP-SAT问题进行交叉组合的。根据引用论文中的结果,这已足够。具体来说,我们建立一个多项式时间算法,其输入是一系列“顶点覆盖”实例(G1,k),(G2,k),…,(Gt,k) 都具有相同的价值 k 所有人都有 n顶点。输出是的实例k-FLIP SAT,参数值为 O(k+logt),对于交叉组合来说足够小,以至于 k-FLIP SAT实例的答案为是,只要其中一个输入图的顶点覆盖大小为 k。通过复制一个输入(不会更改OR的值),我们可以确保输入的数量t 是二的幂。
组成如下进行。在每个输入图形中对图形中的顶点进行编号Gi 如 vi,1,vi,2,…,vi,n。在FLIP-SAT实例中为每个输入图的每个顶点创建一个相应的变量。此外,使选择器变量ui 对于每个输入实例号 i∈[t]。对于每个输入图Gi,我们在公式中添加了一些子句。对于每个边缘{vi,x,vi,y} 图的 Gi,添加子句 (vi,x∨vi,y∨¬ui) 公式,它将编码为“该边的端点之一设置为true,或实例 i 不活跃”。在初始分配中,所有顶点变量均设置为false,所有选择器变量 ui设置为false,以便满足所有这些子句。为了将OR行为构建到合成中,我们将增加公式,以确保满足要求的分配将至少一个选择器设置为true,然后还必须形成所选图形的顶点覆盖。
为了确保我们可以进行选择,同时保持与输入数量相比较小的翻转距离 t,我们使用完整的二叉树的结构 t 叶子,有高度 logt。编号树叶1 至 t 并关联 i带有变量的第四个叶子 ui 控制是否输入 i是否活跃。为二叉树的每个内部节点创建一个新变量。对于每个内部节点,让其对应的变量为x 它的两个孩子的变量是 y 和 z。添加子句(¬x∨y∨z) 捕获含义的公式 (x→(y∨z)),强制执行 x仅当其子级之一为真时才可以为真。要完成该公式,请添加一个singleton子句,其中说二叉树的根节点的变量必须为true。在初始真值分配中,内部节点的所有变量的值均设置为false,这满足公式的所有子句,但单例子句要求树的根节点使其变量为true。
这样就完成了公式和真值分配的描述。设定参数k′ FLIP DISTANCE问题的等于 (k+logt+1),适用于交叉组合。它仍然表明我们可以翻转k′ 一些输入图使公式变为真的变量 Gi 有一个顶点覆盖大小 k。
相反,假设 Gi 有一个尺寸k顶点覆盖。设置k 对应于 k通过翻转将顶点中的顶点变为true。设置选择器变量ui 为true以对该输入进行编码 i 被激活,然后翻转 logt 叶路径上的内部二叉树节点 i扎根为真。容易验证这是令人满意的分配:二叉树中的含义都得到满足,根节点的值设置为true,检查子句边缘的子句Gi′ 对于 i′≠i 保持满意,因为 ui′ 仍然为false,而图的子句 Gi 之所以感到满意,是因为对于每条边,我们至少将一个端点设置为true。
对于正向,假设最多可以通过翻转来满足公式 k+logt+1变量。然后,我们必须将根节点的变量翻转为true。例如,二叉树中的含义强制将叶子的至少一个选择器变量设置为true。ui。为了满足二叉树中编码的含义,从ui 将根目录设置为true,占 1+logt翻转。以来ui 设置为true,为图创建的子句 Gi 对文字不满意 ¬ui,因此它们很满意,因为的每个边缘的端点之一 Gi设置为true。由于至少1+logt 二叉树的变量最多被翻转 k在此解决方案中,顶点变量变为true。这编码了一个大小为k 在 Gi并证明输入之一是YES实例。这样就完成了证明。