Chapter8 NP-complete problems 课后习题8.3
8.3 证明吝啬SAT是NP-完全问题
吝啬SAT问题
给定一组字句(每个子句都是其中文字的析取)和整数k,求一个最多有k个变量为true的满足赋值–如果该赋值存在。
SAT问题(可满足性问题)
SAT的一个实例:
NP完全问题
称一个搜索问题时NP-完全的,是指其他所有搜索问题都可以规约到它。一个问题要成为NP-完全的,它必须能用于解决世界上所有的搜索问题。
规约
如果问题A可以规约为问题B,则意味着如果我们知道如何高效求解B,也一定能高效求解A;如果知道A是难的,则规约将证明B也是难的。
如果将A规约为B记为:
一旦我们知道A是NP-完全的,则我们可以利用它来证明另一个新的问题B也是NP-完全的,仅需将A归约到B。同时这样的规约表明,借助A可以将任意NP-完全问题归约于B。
各种搜索问题的归约顺序
由此说明,这些问题都是NP-完全的。
证明
要证明吝啬SAT时NP-完全问题,首先证明吝啬SAT是NP问题,然后证明SAT是NP-完全问题,再将SAT归约成吝啬SAT。
所有NP问题都可以归约为SAT从(证明SAT是NP-完全问题)
将电路SAT归约为SAT
首先,所有的NP问题都可以归约为SAT的一个推广,所谓的电路可满足性问题(电路SAT)。SAT所要求的是一类具有较简单结构电路的可满足赋值,这类电路的特点说:在其顶端,一组与(AND)操作将所有子句联合起来,最终以这组与操作的联合结果为输出。每个子句都是其中文字的或(OR)操作。并且每个文字要么是一个未知的输入们,要么时其否定(NOT)。且其中不包含任何已知输入门。从另一个方面来看,电路SAT也可以被归约为SAT。我们可以将电路重写为合取范式(子句的与(AND)操作),为电路中的每个门生成一个变量g,并利用如下子句模仿门的效果:
证明所有搜索问题都能归约为电路SAT
假设A是一个NP问题,我们必须找到由A到电路SAT的一个归约。关于A,其任意解都能被快速检验,即存在算法C,以问题实例I和和可能解S为输入,判断S是否为I的解。此外C做出判断的时间关于I的长度为多项式规模的。
根据##7.7节(线性规划)##的结论,任意多项式算法都可以被表示为一个电路,其输入门将用于编码算法的输入。对任意长度(bit数)的输入,电路可以扩展出适当数量的输入门,但电路中门的总数关于输入数量时多项式规模的。如果问题的多项式时间算法给出一个是或否的答案(类似如下情形的C:S所编码信息的是否为I所编码实例的解),则该答案将由输出门给出。
总结一下,给定问题A的一个实例I,我们可以再多项式时间内构造一个电路,其已知输入为对应I对应的比特,未知输入为S对应的比特,则其最终输出为true当且仅当未知输入对应S为I的解。
按照定义,当k==输入变量的总数时,吝啬SAT和SAT是等价的问题,SAT可以归约为吝啬SAT,又可以得知,吝啬SAT的解在多项式时间内是可以得到验证的。因此证明吝啬SAT是NP-完全问题。