算法概论:第八章NP-完全问题——课后题8.16

来源:互联网 发布:中国seo排行榜 编辑:程序博客网 时间:2024/06/16 12:53

在写题目之前,想先总结一下这一章的基本内容。这一章主要讲的是NP, NPC问题。

关于NP问题

  • P问题,是它能够找到一个在多项式时间内解决的算法;而NP问题不是非P问题,而是可以在多项式时间里验证一个解的问题。
  • NP问题:所有搜索问题都称为NP问题。搜索问题的特征性定义是,任意可能解的正确性都能被快速检验,也就是说,存在以问题实例I(用于确定待求解问题的数据)和可能解S为输入的高效检验算法C,其输出时间为true的充要条件是S确实是I的解。
  • NP-完全问题(NPC):存在一个NP问题,所有的NP问题都可以归约化成它。这里说明了两个条件。一是它是一个NP问题,二是所有NP问题都可以归约化为它。

一个问题A可以归约为问题B的含义是,可用问题B的解法解决问题A,或者说,问题A可以“变成”问题B;举个例子,一元一次方程求解可以归约化为一元二次方程求解。(B的复杂度大于等于A的复杂度)

也就是说,如果能找到一个变化法则,对任意一个程序A的输入,都能按这个法则变换成程序B的输入,使两程序的输出相同,则说明问题A可以归约化为问题B。下图来自课本。描述了将求解问题B的算法可以转换为求解问题A的算法的过程。



算法概论——第8章习题8.16

1.题目内容

实验开发新菜品,有多种材料可供选择,希望尽可能多地使用它们,但是有些材料不适合一起搭配。假设有n种可用材料,将任意两种材料间的不和谐度表示成一个n x n矩阵,其中不和谐度是一个位于0.0到1.0之间的值,数值越高表示不和谐度越大。以下是5种材料相互搭配情况:

 

在材料搭配时,由于采用了一些不是完美和谐的材料,每种材料组合都会有一定的负面影响,经过量化后,等于其中不搭配材料间的不和谐度之和。举例来说,材料组合{1,3,5}的负面影响是0.2 + 1.0 + 0.5 = 1.7,我们希望这个值越小越好。

 

本题目给出的是一个烹调实验(EXPERIMENTAL CUISINE)问题

输入:可选材料的数量n;n x n的不和谐矩阵D;某个值p >= 0

输出:使得负面影响值不超过p的最大材料数量

 

证明如果烹调实验在多项式时间内可解,则3SAT也能。


2. 证明思路

首先,该问题可转化为考虑如何把一个3SAT问题归约为烹调实验(3SAT→烹调实验)问题。由于在课本中已证明3SAT问题归约到独立集问题(3SAT→独立集),那么如果证明了独立集问题可以归约到烹调实验问题(独立集→烹调实验),根据归约的“可传递性”(3SAT→独立集→烹调实验3SAT问题也可以归约到烹调实验问题3SAT→烹调实验,则可证明如果烹调实验在多项式时间内可解,则3SAT也能。

独立集问题,就是给定一个包含g个顶点的图G,求两两互不相邻的顶点构成的最大集合。我们将图G用邻接矩阵来表示,相连的节点标为1,不相连的节点标为0。如下图转为矩阵可以得到


从邻接矩阵可以看到,节点是否邻接可以表示烹调实验中的材料是否完美匹配。顶点i和顶点j表示烹调实验中的材料i和材料j,顶点i和顶点j邻接代表了材料i和材料j是完全不和谐的,不和谐度为1,最后得到图G的独立集的大小就是烹调问题中使得负面影响不超过0的最大材料数量。


下面整理一下归约过程。给定独立集的一个实例(G, g),我们采用以下方式生成一个烹调问题实例(n, D, p):

  • 对图G生成一个邻接矩阵,1表示邻接,0表示不邻接,得到的矩阵是相当于D;
  • n值相当于g值,p值为0;

上述归约过程仅需多项式时间。下面给出反向映射实例解的方法。需要证明以下内容:

给定的包含n个材料的烹调实验,负面影响不超过0的最大材料数集合S,可以将其高效地恢复成实例(G, g)的一个独立集。

对于任意的节点i,集合S不会选择与节点i相连的那些节点,因为它们与节点i的不和谐度都是1,只要选择了就会超过p值(p值为0)。因此,对于上图来说,如果S选了节点0,则与节点0连接的节点1和节点2就不会包含在S中,但可以选择节点345;如果选了节点3,就不能选择节点25,能选节点4,然后得到一个S集合是{0,3,4}。因为烹调实验中包含n个材料,每个材料代表了一个顶点,所以选出来的最大材料集合可以直接作为图G的独立集。

证明完成。



原创粉丝点击