算法概论:第八章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;
上述归约过程仅需多项式时间。下面给出反向映射实例解的方法。需要证明以下内容:
对于任意的节点i,集合S不会选择与节点i相连的那些节点,因为它们与节点i的不和谐度都是1,只要选择了就会超过p值(p值为0)。因此,对于上图来说,如果S选了节点0,则与节点0连接的节点1和节点2就不会包含在S中,但可以选择节点3或4或5;如果选了节点3,就不能选择节点2和5,能选节点4,然后得到一个S集合是{0,3,4}。因为烹调实验中包含n个材料,每个材料代表了一个顶点,所以选出来的最大材料集合可以直接作为图G的独立集。给定的包含n个材料的烹调实验,负面影响不超过0的最大材料数集合S,可以将其高效地恢复成实例(G, g)的一个独立集。
证明完成。
- 算法概论:第八章NP-完全问题——课后题8.16
- 《算法概论》第八章NP完全问题——8.16习题解
- 算法概论 第八章NP-完全问题 8.8题
- 《算法概论》第八章NP完全问题——8.19习题解
- 算法概论第八章 NP完全问题 习题证明
- 《算法概论》第八章NP完全问题部分习题解
- NP完全问题的证明-算法概论课后习题8.15
- 算法概论 | NP完全问题
- 算法概论 第八章课后题8.3
- 《算法概论》第八章课后题
- 算法概论习题8.8——证明精确的4SAT是NP-完全问题
- 算法概论第八章课后习题
- 算法概论第八章课后习题
- 算法概论第八章课后习题8.8
- 算法概论第八章课后习题8.3
- 算法概论习题:8.14NP-完全问题的证明
- 算法概论习题 8.22 NP-完全问题证明
- NP完全问题 课后习题
- 【Visual Studio】解决方案未保存,请先保存你的解决方案,然后再管理Nuget包
- VLAN配置实验和TRUNK配置实验
- TreeFrog 之生成器
- mybatis中${}与#{}的区别
- HDU 3068 最长回文 Manacher算法O(n)回文子串算法
- 算法概论:第八章NP-完全问题——课后题8.16
- JavaEE
- python中使用selenium的一些注意点2
- archlinux_安装篇
- Python内置函数
- 【WPF】窗体页面间传值总结
- SQL 基本语法
- Liferay Portal学习笔记之(五):开发主题风格theme
- 指针求最大值