划分问题
划分问题表述为:
实例: 有限集合 A ,对应于每个 a∈A,有正整数价值 S(a)∈Z+。
询问: 是否存在子集 A′⊆A,使得
a∈A′∑S(a)=a∈A−A′∑S(a)
划分问题可以看成的将一堆价值不等的物体分成两堆价值相等的,每一堆的价值是总价值的一半
核心思路
要将 3DM 问题多项式变换 PAR 问题的核心思想如下:
-
将 W,X,Y 中的每一个元素依次按顺序定义为一个只有一位为 1,其余位皆为 0 ,且不可能通过有限次进位互相得到的二进制值(目的是为了让其他元素没有办法通过累加得到其他元素的值,也即让这些元素唯一)。
-
将 M 中的每一个元素 mi 都作为 PAR 问题中集合 A 的元素 ai,此时元素 ai 的价值 S(ai) 可以通过将 mi 中的三个元素分配的二进制值加起来得到。
-
当完美对集 M′ 存在时,将 M′ 中的所有元素相加,就可以以此得到一个唯一的由 M′ 确定的二进制串,其值确定,表示为 B。此时将 M 中的所有元素相加,也可以以此得到一个二进制串,值为 S(M),即
S(M)=i=1∑KS(ai)
- 此时,在 A 中额外构建两个辅助元素 b1 和 b2(也即 A 集合的总大小为 ∣M∣+2)
S(b1)=2i=1∑KS(ai)−B,S(b2)=i=1∑KS(ai)+B
- 其总价值易得为 4 倍的 S(M),即
4i=1∑KS(ai)
- 因此,如果存在完美划分,那么 b1 和 b2 肯定在不同的划分中,且每个划分的总价值均为 2 倍的 S(M)
- 最后,通过方法不等式和推导可以证明,仅完美对集 M′ 存在时候, 可以找出一个 B 和 b1 一起, M−M′ 和 b2 一起。
NPC 证明
首先构建一个 3DM 问题实例, 即
实例: 集合 M⊆W×X×Y, 其中 W、X、Y 是互不相交的集合, 且 ∣W∣=∣X∣=∣Y∣=q 。 其中, W={w1,w2,…,wq},X={x1,…,xq},Y={y1,…,yq}, 且 M={m1,…,mk}
定义 p
p=⌈log2(K+1)⌉
据此可得 K≤2p−1
随后, 为 W1X,Y 中的每个元素分配一个二进制值。将 W,X,Y 中元索按顺序重新排列 为 w1,w2,…,wq,xq+1,xq+2,…,x2q,y2q+1,…,y3q, 定义函数 V(⋅) 表示每一元素的值, 则
V(w1)…V(y3q) 依次为 2p(3q−1),2p(3q−2),…,2p(2q),…,2p,20, 共 3q 个元素。
其值可以看做是下图每一元素的最右边的第一个格子。

据此, 定义 PAR 的实例 A={a1,a2,…,ak,b1,b2}, 定义 S(ai) 的值为相应 mi 中的三个分
量对应的二进制值之和。即令 mi={wf(i),xg(i),yh(i)},f,g,h 分别表示 mi 元素中三个分量在其对应集合中的下标, 则
S(ai)=V(w)+V(x)+V(h)
此时, 因为 ∣M∣=K≤2p−1, 而 V(wi+1)V(wi)=2p(3q−i+1)2p(3q−i)=2p1,因此 KV(wi)<V(wi+1) 。
由于 K 是 M 的数量, 也即每个 V(w),V(x),V(y) 在该集合内, 不可能由其他的 V(w) 累加得到。
设 B 为 W,X,Y 中所有元素二进制值之和, 表示为:
B=j=0∑3q−12pj
因为所有元素唯一,所以只有完美对集中所有元素的二进制值之和为 B。
现在定义 A 中剩余的两个元素 b1,b2 的值分别为:
S(b1)=2i=1∑KS(ai)−B,S(b2)=i=1∑KS(ai)+B
此时,得 A 中所有元素长度之和为
S(A)=i=1∑KS(ai)+S(b1)+S(b2)=4i=1∑KS(ai)
若实例 A 存在完美划分 A′ 则
S(A′)=2i=1∑KS(ai)
所以,若存在完美划分 A′,则 b1 和 b2 两个元素不可能同时在 A′ 中。因为 S(b1)+S(b2)=3∑i=1KS(ai)
多项式时间证明: 在极限情况下, w1=2p(3q−1), 且 M 中所有元素均存在 w1, 此时
K2p(3q−1)<2q2p(3q−1)=23pq,
因此 S(M)<23pq+1,S(b2)<2S(M),S(b1)<2 S(M),
而 2S(M)<23pq+2,因此这两个数,以及其他的数均可用不多于 3pq+1 位的二进制数表示,这说明这项变换是多项式时间的。
(->) 若在 3DM 问题的这个实例中, M′⊆M 是 M 的完美匹配,则在 PAR 问题相应实例中, 设 A′={ai∣mi∈M′}∪{b1},则
S(A′)=mi∈M′∑S(ai)+S(b1)=B+2i=1∑KS(ai)−B=2i=1∑KS(ai)
于是我们证明了 3DM∝PAR, 即 PAR∈NPC。
(<-) 假设集合 A 中存在子集 A′, 使
a∈A′∑S(a)=a∈A−A′∑S(a)=2i=1∑KS(ai)
成立。那么在子集 A 或 A−A '中必有一个含有元索 b1 但不含有元素 b2。 不妨假设 A′ 中含有元素 b1 而不含有元素 b2, 那么 A′∩{ai∣1⩽i⩽K} 中元索长度之和应该等于 B, 根据
上面讨论, A′∩{ai∣1⩽i⩽K} 中的元素所对应的 M 中的子集 M′ 是一个完美对集。