【NPC】1、NP、P、NPC概念介绍
来源:互联网 发布:腾讯网络主播 编辑:程序博客网 时间:2024/05/06 22:05
一、P、NP、NPC概念
1971年,Stephen Cook提出了第一个NPC问题:布尔可满足性问题。
1973年,Leonid Levin提出了21个经典的NPC问题。
1979年,Garey和Johnson出版了一本书:“Computers and Intractability: A Guide to NP-Completeness”,中文版是“计算机和难解性”,在这本书中提出了“6个基本的NPC问题:3SAT、顶点覆盖、团、三维匹配、汉密尔顿回路、划分问题”。
P问题是集合的集合,因为P={最短路径问题、最小生成树问题、...},而最短路径问题又是一个集合。
NP问题:多项式时间内能够验证的问题称为NP问题。
验证(Verify)的意思是:给定一个问题的实例(Instance)、证书(Certificate,证书就是类似于证据),需要验证这个证书是这个问题的正确答案。
比如汉密尔顿路径问题,实例为G=(V,E),证书为顶点序列 {v0,v1,v2,v3,....,vk},我们的目的是要验证这个证书就是这个问题的答案,验证方法为:先遍历一遍这个点序列,看看是不是每个点只出现一次,然后对于(vi,vi+1)是否为G的边,这样就能够验证这个点序列是不是汉密尔顿路径,很显然这个验证过程是多项式时间的,所以汉密尔顿路径是NP问题。
(1)P问题是不是NP问题呢?
很显然是,因为我们如果要验证一个P问题,只需要给一个实例和一个空的证书(即不需要给证书),直接求解P问题即可,所以也是多项式时间能验证的。
(2)P是不是等于NP呢?
目前的答案是“不是”,但是还不能证明,因为NP中还有一类NPC问题,如果我们能够证明NPC是P问题,则NP=P。
NPC问题:目前不能用多项式时间解决的问题,但是我们还不能证明这个问题不能用多项式解决,我们这次的目标是研究这个问题。
NPC的定义:
NP难问题:如果一个问题不满足NPC的第一个条件,只满足NPC的第二个条件,则称为NP难问题。
二、规约
规约(Reduction):如果我们要证明一个问题A是NPC问题,则只需要首先证明他是NP问题,然后只要找一个你所知道的NPC问题规约到A即可。
如果A到B规约成功,则说明:B至少比A要难,即只要有一个解决B的黑盒子算法,则就能解决A问题。
规约类似于函数调用,比如要将A规约到B,则只要:
function A(....)
//一系列变换
B(....);
因此我们在证明一个问题是NPC问题时,如果掌握的已知NPC问题越多,对于你的规约越有利。
一般来说证明B是NPC的过程如下:
1.证明B是NP问题。
2.知道一个已知的NPC问题A。
3.给出一个规约过程,并证明此规约过程是多项式时间的。
对于A中的任意一个实例:
4.如果A有一个真的实例,则B也有一个真的实例。
5.如果B有一个真的实例,则A也有一个真的实例。
接下来的文章也是按照这个方式来证明的。
总结一下P、NP、NPC的关系如下:
如果我们能够证明一个问题是NPC问题,则表明很有可能这个问题不能用多项式时间解决。下面的图是《计算机与复杂性》这本书中的趣图,很形象地说明了证明一个问题是NPC的用处。
转自:http://blog.csdn.net/xiazdong/article/details/8258053
0 0
- 【NPC】1、NP、P、NPC概念介绍
- 【NPC】1、NP、P、NPC概念介绍
- NP,NPC,P问题的概念
- P问题,NP问题,NPC问题概念
- P,NP,NPC
- P,NP,NPC问题
- P,NP,NPc
- 【转】P,NP,NPC
- P、NP、NPC问题
- P、NP、NPC
- P、NP、NPC问题
- P NP和NPC
- P,NP,NPC问题
- p ,np ,npc
- P/NP/NPC问题
- P NP NPC问题
- P,NP,NPC
- P,NP,NP-hard,NPC
- caffe 全链接层
- 三位数的数位分离
- 获取字符串的最大子串
- 第十二周项目3-用递归的方法求解(最大公约数)
- 8个很有用的PHP安全函数,你知道几个?
- 【NPC】1、NP、P、NPC概念介绍
- 为什么我基本不写代码级技术性文章?
- apt-get 命令
- eclipse编译android开源代码示范,及生成jar引用出错原因解析
- 《Machine Learning(Tom M. Mitchell)》读书笔记——5、第四章
- slim的httppost数据的解析
- WebConfig的httpHandlers无效解决处理
- java 异常处理
- ecshop后台添加虚拟销量以及前台显示销量