给定一个 ×二进制矩阵(项为或),问题在于确定是否存在两个二进制向量,使得(所有操作都在)。NP这个问题难吗?n M 0 1 v 1 ≠ v 2 M v 1 = M v 2 Z
很明显,在NP中,您可以提供两个向量作为见证。
等效地:给定,是否有一个非零向量使得?v ∈ { - 1 ,0 ,1 } Ñ中号v = 0
等效地:在给定向量,有两个不同的子集使得?X = { X 1,... ,X Ñ } { 0 ,1 } 米甲,乙⊆ X Σ X ∈ 甲 X = Σ X ∈ 乙 X
给定一个 ×二进制矩阵(项为或),问题在于确定是否存在两个二进制向量,使得(所有操作都在)。NP这个问题难吗?n M 0 1 v 1 ≠ v 2 M v 1 = M v 2 Z
很明显,在NP中,您可以提供两个向量作为见证。
等效地:给定,是否有一个非零向量使得?v ∈ { - 1 ,0 ,1 } Ñ中号v = 0
等效地:在给定向量,有两个不同的子集使得?X = { X 1,... ,X Ñ } { 0 ,1 } 米甲,乙⊆ X Σ X ∈ 甲 X = Σ X ∈ 乙 X
Answers:
我使用user17410等效公式:
输入:矢量X = { X 1,... ,X 米 }在{ 0 ,1 } Ñ,Ñ被输入的一部分
问题:是否存在两个不同的子集甲,乙⊆ X,使得
Σ X ∈ 甲 X = Σ X ∈ 乙 X
硬度证明涉及许多中间减少,这些减少遵循用于证明标准“等值子集和”问题的硬度的同一“链”:
X3C 子集和≤ PARTITION ≤ 偶数-奇数PARTITION ≤ EQUAL子集和
(我仍在检查它,所以可能是错误的:)
步骤1
以下的问题(0-1 VECTOR SUBSET SUM)是一个NP完全:给定 ,X 我矢量在{ 0 ,1 } Ñ和目标和向量吨,决定是否有甲⊆ X,使得 Σ X ∈ 甲 X = 吨证明:从EXACT COVER直接还原BY 3-SETS(X3C):给定一组的ñ元件ŷ = { ÿ
步骤2 查找两个相等的子集和之间米 0-1矢量超过{ 0 ,1 } Ñ,等价于求两个相等的子集和一个,乙具有有界尺寸的要素矢量的X 1。。。x m其中,对于固定k,m a x { x i } = O ((m n )k)。
例如向量集:
x1 2 1 0 1
x2 1 2 3 1
等于0-1向量:
x1 1 1 0 1 1 0 0 0 0
1 0 0 0 0 1 0 0 0
0 0 0 0 1 1 0 0 0
^ ^
+-- 0 elsewhere
x2 1 1 1 1 0 0 1 0 0
0 1 1 0 0 0 0 1 0
0 0 1 0 0 0 0 0 1
0 0 0 0 0 0 1 1 1
^ ^ ^
+-- 0 elsewhere
非正式地,将0-1个向量进行分组(如果选择x2组的一个向量并将其添加到子集,则您被迫将另外两个向量包括在A中,最后一个向量放入子集B),并且总和在一元(这就是为什么相应的非二进制向量必须包含相对于m n多项式有界的元素的原因)。
因此,以下问题是NP完全的。
步骤3
以下的问题(0-1 VECTOR PARTITION)是一个NP完全:给定的 ,X 我矢量在{ 0 ,1 } Ñ决定是否X可以在两个子集被划分乙1,乙2使得 Σ X ∈ 乙1 X = Σ X ∈ 乙2 X
证明:从0-1矢量和中减去:给定 和目标和向量t;令S = ∑ x i,我们向X添加以下向量:b ' = − t + 2 S和 b ” = t + S: 。
()假设存在甲⊆ X,使得Σ X ∈ 甲 X = 吨 ; 我们设置乙1 = 甲∪ { b ' }和乙2 = 乙∖ 乙1 = X ∖ { 甲} ∪ { b “ } ; 我们有 Σ X ∈ 乙1 = b ' + Σ X ∈ 甲Σ X ∈ 乙2 = b “ + Σ X ∈ X ∖ 甲 X = b ” + 小号- Σ X ∈ 甲 X = 2 小号
()假设B 1和B 2具有相等的和。b ',b “不能同时属于相同的组(否则它们的总和是≥ 3 小号,不能“在另一组平衡”的要素)。假设b ' = - 吨+ 2 小号∈ 乙1 ; 我们有:
因此,我们必须具有和乙1 ∖ { b ' }是0-1 VECTOR SUM一个有效的解决方案。
我们只允许在集合使用0-1个向量,因此,向量b ',b ”必须“表示为一元”,如步骤2所示。
步骤3
证明::减少是从0-1矢量分区开始的,与减少从分区到偶数分区的过程类似。如果是米以上向量{ 0 ,1 } Ñ替换两个向量在每个矢量{ 0 ,1 } 2 Ñ + 2 米:
1 2 n
--------------------
x_i b_1 b_2 ... b_n
becomes:
1 2 ... 2i ... 2m
--------------------------
x'_2i-1 0 0 ... 1 ... 0 b_1 b_2 ... b_n 0 0 ... 0
x'_2i 0 0 ... 1 ... 0 0 0 ... 0 b_1 b_2 ... b_n
第四步
1 2 ... i i+1 ... m m+1 m+2 ... m+i ... 2m 2m+1 ... 2m+n
------------------------------------------------------
0 0 ... 2 0 ... 0 0 0 1 0 x_{2i-1}
1 2 ... i i+1 ... m m+1 m+2 ... m+i ... 2m 2m+1 ... 2m+n
------------------------------------------------------
0 0 ... 0 2 ... 0 0 0 1 0 x_{2i}
1 2 ... ... m m+1 m+2 ... . 2m 2m+1 ... 2m+n
------------------------------------------------------
2 0 ... ... 0 0 0 1 x_{2m}
1 2 ... ... m m+1 m+2 ... ... 2m 2m+1 ... 2m+n
------------------------------------------------------
4 0 ... ... 0 0 0 0 0 ... 0
0 4 ... ... 0 0 0 0 0 ... 0
...
0 0 ... ... 4 0 0 0 0 ... 0
编辑:我的原始证明有一个错误。我现在认为它是固定的。
这很容易做到。对于每对相邻的位位置,添加以下形式的三个向量。在这里,最后两位是仅在这三个向量中不为零的坐标,并且在下面未明确给出的每个位均为0。
..10 .. 11
..01 .. 10
..01 .. 01
让我举个例子。我们想展示5 + 3 = 8的工作原理。
这是8 = 5 + 3的二进制:
1000
=
0101
0011
这些位串以二进制形式给出相同的总和,但不以向量相加给出相同的总和。
现在,我们在1、2、4位有进位,因此我们需要在方程中添加三组三个向量,以执行这些进位。
1000 00 00 00
0001 00 00 01
0001 00 00 10
0010 00 01 00
0010 00 10 00
0100 01 00 00
0100 10 00 00
=
0101 00 00 00
0011 00 00 00
0010 00 00 11
0100 00 11 00
1000 11 00 00
这些集合现在在向量加法中具有相同的总和。总和为:
1222 11 11 11
在两种情况下。
..01 .. 01 00
..01 .. 10 00
..10 .. 11 00
..01 .. 00 01
..01 .. 00 10
..10 .. 00 11
您遇到的问题是,您会得到两组具有相同总和的不同向量:
..01 .. 01 00
..01..10 00
..10 .. 00 11
=
..01 .. 00 01
..01 .. 00 10
..10 .. 11 00
..01 .. 11000
..01 .. 00100
..01 .. 00010
..01..00001
..10 .. 10001
..10..01110
作品。您可以轻松检查该关系
11000
00100
00010
00001
=
10001
01110
是这六个向量之间唯一可能的关系,因为这六行形成的矩阵的等级为5。