下面将讲一下NPC问题中,从3DM到PARTITION的规约。
首先我们说一下什么是3DM问题和PARTITION问题。
1. 3DM的全称为:3-DIMENSIONAL MATCHING(3DM)
实例:存在一个集合M⊆W×X×Y,并且W,X,Y为不想交的集合,|W|=|X|=|Y|=q。
问题:是否存在一个集合M'⊆M,使得|M'|=q,并且M'在W,X,Y三维上不存在交集。
详见维基百科:http://en.wikipedia.org/wiki/3-dimensional_matching
2. PARTITION
实例:存在一个有限集合A,以及”size“函数,使得任意a∈A有size(a)∈Z+ 。
问题:是否存在A'⊆A,满足:
a∈A'中size(a)的和=a∈(A-A')中size(a)的和
详见维基百科:http://en.wikipedia.org/wiki/Partition_problem
现在我们开始从3DM到PARTITION的规约。
现在,令|W|=|X|=|Y|=q,M⊆W×X×Y为任意的3DM实例
W={w1,w2,...,wq}
X={x1,x2,...,xq}
Y={y1,y2,...,yq}
M={m1,m2,...mk}
这里,|M|=k。
根据问题,我们必须构造出PARTITION问题中的集合A,以及size函数size(a)∈Z+ 并且满足PARTITION问题的约束:
a∈A'中size(a)的和=a∈(A-A')中size(a)的和
我们令集合A包含两部分的元素,它们为{a1,a2,...,ak}U{B}
现在,我们由3DM问题来构造我们的元素a1~ak,首先看下图:
每一个ai具有如上图的结构,我们使用2进制编码来构造ai,每一个ai与3DM问题中的mi相对应,假设mi=(wf(i) ,xg(i) ,yh(i) ),f(),g(),h()分别为对应W,X,Y集合的转换函数。从上图还可以看出每一个W,X,Y均由q个”区域“组成,并且每个区域中含有p位,这里p是什么呢?p是由3DM中的k构造出来的,p等于log2 (k+1) 向上取整,为什么要这样构造呢?其实是有原因的,这里留下悬念,一会儿会讲到。当我们在mi中给定wf(i) ,xg(i) ,yh(i) 之后我们通过将W,X,Y对应”区域“的p位中的最右一位置为1来为ai进行赋值,其余位均置为0。这样size(ai)就可以通过二进制编码来算出其十进制的值来了,为:
现在除了PARTITION问题中的b元素之外,其它元素都以构造完成,下面我们先来给出B是什么,B等于
现在由3DM构造的PARTITION问题已经完成,明显可以看出,我们可以再P时间内,完成由3DM到PARTITION问题的规约。
现在我们来看看这个构造是如何work的。
当我们有了一个3DM的solution之后,一定能对应PARTITION问题的solution。反之,当我们有了一个PARTITION问题的solution之后也一定能够找到一个3DM的solution。
这个主要是由我们刚才留下的悬念来保证的。
因为,我们每一维(dimension)上最多只有k个元素,而p=log2 (k+1) ,因此,假如我们在某一位上有重叠也不会上溢到其它的”区域“,这保证了我们能够回得去。我们能够过得来是由于B的值根本上就是由我们的构造的出的,也一定能够过得来。
这一点大家可以好好思考一下, 看看是不是这么回事。
由于能力有限,我的理解也就到这种地步了。如果谁有好的建议,希望多提意见,大家共同进步!
谢谢!
深蓝
2011年4月9日
---