算法概论课后习题解答
习题8.2
*证明如果有一个判断图中是否存在哈密顿回路的程序,该程序的时间复杂性是多项式的,则用
该程序构造哈密顿回路是多项式的.*
证明:
1. isRudrata(G)为判断是否是哈密顿回路的程序,
G 为一个任意图
edges为G的边集合
2. 循环从edges中取出一条边e
3. 如果isRudrate(G-e)返回true,说明e是哈密顿回路的一条边,
否则,将e从G中去掉
4. 因为isRudrate(G)的时间是多项式的,一个图的边数是确定的,所以用该程序构造哈密顿回路是多项式时间的
习题8.3
证明STINGY SAT是NP完全问题
1. 很明显 STINGY SAT可以在多项式时间内完成验证,即STINGY SAT是NP的,关键是要证明
STINGY SAT是NP完全的
2. 通过将变量的总个数为k即可将SAT问题归约为STINGY SAT问题,所以STINGY SAT是NP完全的
习题8.8
证明 4NAT问题的NPC问题
通过将3NAT问题归约为4NAT为题来证明4NAT的完全性
a. 在3NAT中,如果某个字句中包含某个文字多次,可以缩减为1次
b. 如果字句中包含变量的肯定和否定,可以去掉该变量
通过上述ab步骤来处理3NAT,然后可以在每个字句中添加哑变量来将每个字句所包含的问题扩展为4个,通过这样的归约可以证明4NAT的NPC完全性