P、NP、NPC


概念

> P问题:能够在多项式时间内解决的决策问题。

—举例: 图搜索问题、最短路径问题、最小生成树问题······


> NP问题:不能在多项式时间内解决或不确定能不能在多项式时间内解决,但能在多项式时间验证的问题。

—验证:给定一个问题的实例、证书(类似于证据),需要验证这个证书是这个问题的正确答案。

— 举例:汉密尔顿路径,实例为G=(V,E),证书为顶点序列 {v0,v1,v2,v3,….,vk},我们的目的是要验证这个证书就是这个问题的答案,验证方法为:先遍历一遍这个点序列,看看是不是每个点只出现一次,然后对于(vi,vi+1)是否为G的边,这样就能够验证这个点序列是不是汉密尔顿路径,很显然这个验证过程是多项式时间的,所以汉密尔顿路径是NP问题。


> NPC问题:目前不能用多项式时间解决的问题,但是我们还不能证明这个问题不能用多项式时间解决,我们这次的目标是研究这个问题。

—满足的两个条件:是一个NP问题 + 所有的NP问题可以在多项式时间内规约到它

—举例:3SAT、顶点覆盖、团、三维匹配、汉密尔顿回路、划分问题·······


> NP难问题:所有的NP问题可以在多项式时间归约到它,但它不一定是一个NP问题


> 归约(约化)的标准概念: 如果能找到这样一个变化法则,对程序A的任意一个输入,都能按这个法则变换成程序B的输入,使这两个程序的输出相同,那么我们说,问题A可归约为问题B

— 问题A可以约化到问题B的含义是,可以用解决B的解法来解决A,或者说A可以“变成”B。

—A可归约为B的直观含义:B的时间复杂度>=A的时间复杂度。也即,A比B简单。


关系

P、NP、NPC、NP Hard问题的关系如下:


证明NPC问题

证明问题B是NPC问题的过程如下:

  1. 证明B是NP问题
  2. 知道一个已知的NPC问题A
  3. 证明A归约到B。

常见归约问题

基本知识

1、独立集 —— 在图G = (VE)中,如果顶点集合S⊆V中的任意两点之间都没有边,则称S是独立的。
—难点: 寻找最大独立集。
—目标: 装入尽可能多的顶点,要求边涉及到的边服从一些限制条件。


2、顶点覆盖 —— 给定图G = (VE),顶点集合S⊆V,如果图中的每一条边至少有一个端点在S中,则称S是一个顶点覆盖。
—难点: 寻找最小顶点覆盖。
—目标: 用尽可能少的顶点覆盖图中的所有边。


3、集合覆盖 —— 试图用一组较小的集合覆盖一个任意的对象集合。


常见问题

1、独立集问题——给定图G和数k,问是否包含大小至少为k的独立集?


2、顶点覆盖问题——给定图G和数k,问G是否包含大小至多为k的顶点覆盖?


3、集合覆盖问题——给定n个元素的集合U,U的子集S1,···,Sm以及数k,问在这些子集中有一组子集,它们的并等于整个U且至多包含k个子集吗?


4、集合包装问题——给定n个元素的集合U,U的子集S1,····,Sm以及数k,问在这些子集中至少有k个两两不相交吗?


5、SAT(可满足性问题)——给定bool变量集X={x1,···,xn}上的一组子句C1,···,Ck,问存在满足的真值赋值吗?
注意:每个子句均为析取子句(逻辑或∨),最终结果为各个子句的合取(逻辑与∧)。


6、3-SAT(三元可满足性问题)——给定bool变量集X={x1,···,xn}上的一组子句C1,···,Ck,每个子句的长为3,问存在满足的真值赋值吗?
注意:同上。


常用引理

设G=(V, E)是一个图,S⊆V,那么S是一个独立集当且仅当它的补V-S是一个顶点覆盖。
证明:首先,设S是一个独立集。考虑任一边e=(u,v),因为S是独立集,u和v不可能同时在S中,所以u和v至少有一个在V-S中,即得任一边至少有一个端点在V-S中,所以V-S是一个顶点覆盖。
反过来,设V-S是一个顶点覆盖,考虑S中的任意两个顶点u、v,若它们间有一条边e,那么e的两个端点均不在V-S中,这与假设V-S是一个顶点覆盖矛盾。所以S中的任意两点均无连线,所以S是一个独立集。


常见归约问题

归约的一般思想(要点):证明Y到X的归约,要用问题X中的分量构造“零件”来描写在问题Y中正在做的事

1、 独立集归约到顶点覆盖
证明:若有一个解顶点覆盖的黑盒子,那么通过问黑盒子G是否有大小至多为n-k的顶点覆盖,就能确定G是否有大小至少为k的独立集。


2、顶点覆盖归约到独立集
证明:若有一个可以解独立集的黑盒子,那么通过问黑盒子G是否有大小至少为n-k的独立集,就能确定G是否有大小至多为k的顶点覆盖。


3、顶点覆盖归约到集合覆盖
证明:若有一个可以解集合覆盖的黑盒子,考虑顶点覆盖的任一实例,给定图G=(V, E)和数k。
构造集合覆盖的一个实例,其基集U等于边E,对图G的每一个顶点i∈V,设Si⊆U为G中所有和点i相关联的边,把Si加入集合覆盖的实例中。
U能被集合S1,S2,···,Sn中的至多k个覆盖当且仅当G有大小至多为k的顶点覆盖。于是,给定顶点覆盖的实例,如上述的那样构造集合覆盖的实例,并把它输入黑盒子。回答yes当且仅当黑盒子回答yes。


4、独立集归约到集合包装
证明:若有一个解集合包装的黑盒子,考虑独立集的任一实例,给定图G=(V,E)和数k。
构造集合包装的一个实例,其基集U等于边E,对图G的每一个顶点i∈V,设Si⊆U为G中所有不和点i相关联的边,把Si加入集合包装的实例中。
U的子集S1,S2,···,Sn(实际是n个边集合)中至少k个两两不相交(即不存在相同边)当且仅当G有大小至少为k的独立集(此时k个顶点必不存在相连边),于是,给定独立集的实例,如上述的那样构造集合包装的实例,并把它输入黑盒子。回答yes当且仅当黑盒子回答yes。


5、3-SAT归约到独立集
证明:设有一个解独立集的黑盒子,要解3-SAT的实例,实例由变量集X={x1,····,xn}和子句C1,····,Ck组成。
考虑3-SAT的方法是:必须从每一个子句中选择一个项,然后找一组真值赋值使得所有找出来的项都为1,从而满足所有的子句。因此,如果如果没有两个被选中的项冲突,那么就成功了。
具体归约:用独立集描述3-SAT实例。首先,构造图G=(V,E),它由分成k个三角形的3k个顶点组成,如下图所示。对每一个子句i,构造3个顶点vi1,vi2,vi3。依据3-SAT实例子句在图中增加边描述冲突:在每一对标号对应冲突的项的顶点间添加一条边。

要证明原来的3-SAT是可满足的当且仅当构造出来的图G(依据3-SAT的实例子句构造)有大小至少为k的独立集。
>首先,若3-SAT是可满足的,那么构造出来的图G中的每个三角形至少包含一个标号的值为1的顶点。设S是每一个三角形中的一个这样的顶点组成的集合。设S不是一个独立集,则至少存在两个顶点u、v∈S间有一条边,则u、v一定是冲突(一个是1,另一个必是0)的,而S中的每个点值都为1,所以矛盾,所以假设不成立,即S是一个独立集。
>反过来,设图G有一个大小至少为k的独立集S。那么,当S的大小恰好为k,那么一定是由每个三角形的一个顶点组成,且S中的冲突顶点最多只能成单出现。所以显然可以设S中所有顶点对应的值全为1,且这些顶点每个对应于一个子句中选择的代表,所以此时对应的3-SAT实例存在真值赋值。

P、NP以及NPC问题相关推荐

  1. 【计算理论】计算理论总结 ( P 、NP 、NPC 总结 ) ★★

    文章目录 一.P 类 二.NP 类 三.NPC 类 ( NP 完全 ) 四.P .NP .NPC 三者关系 一.P 类 P\rm PP 类 : ★ 所有 能够被 确定性 单个带子图灵机 , 在 多项式 ...

  2. 那传说中的P、NP以及NPC问题

    那传说中的P.NP以及NPC问题     (这里只是自己的一些总结) 在讲这几个问题之前,有几个东西是必须要说的,包括时间复杂度.空间复杂度.图灵机什么的.那么我们就慢慢来一一说来.    图灵机:图 ...

  3. P、NP、NPC(NP完全问题)、NP-hard问题概述

    P.NP.NPC(NP完全问题).NP-hard问题概述 一.概念总结 1.P问题: 能在多项式时间内解决的问题 2.NP问题: 不能在多项式时间内解决或不确定能不能在多项式时间内解决,但能在多项式时 ...

  4. P、NP、NPC问题

    转自:http://blog.csdn.net/wwy851/article/details/6082007 最近看了很多关于P.NP和NPC问题的文章,但是都不是很系统全面,很多叙述的也不太清楚,有 ...

  5. P和NP以及NPC、NP-Hard问题

    文章目录 P问题 NP问题 NP-C问题(NP-Complete) NP-Hard 规约 欢迎大家访问我的GitHub博客 https://lunan0320.cn **p代表Polynomial,N ...

  6. 【算法】P问题 NP问题 NPC问题 NPH问题的定义与理解

    一.前言 二.多项式 三.时间复杂度 四.P问题 五.NP问题 六.NPH问题,NPC问题 七.已经被证明的NPC问题 八.一些具体问题的总结 九.总结 一.前言 在讨论算法的时候,常常会说到这个问题 ...

  7. (数学)P、NP、NPC、NP hard问题

    概念定义: http://m.elecfans.com/article/757041.html https://www.cnblogs.com/AndyJee/p/5048556.html P问题:能 ...

  8. P、NP、NPC 问题解释

    P.NP.NPC 问题解释 行文目的 什么是多项式算法 什么是P问题 什么是NP问题 NP问题与P问题的关系 NPC问题 什么是约化(Reducibility) 什么是NPC问题 NP-hard问题 ...

  9. P、NP、NPC和NP-Hard相关概念

    P.NP.NPC和NP-Hard相关概念的图形和解释 一.相关概念 P: 能在多项式时间内解决的问题 NP: 不能在多项式时间内解决或不确定能不能在多项式时间内解决,但能在多项式时间验证的问题 NPC ...

最新文章

  1. 为什么分布式一定要有消息队列?
  2. 以后要使用tf.keras不要单独使用KERAS
  3. 成功解决keras库中出现AttributeError: ‘str‘ object has no attribute ‘decode‘
  4. BC之CM:区块链之共识机制——深入浅出以及国内外当下主流区块链平台共识机制纵向、横向比较相关配图
  5. go语言中错误的处理和实现自己的错误处理类型
  6. Python---爬虫案例
  7. VS中出现 模块计算机类型“x86”与目标计算机类型“x64”冲突
  8. ES6学习(新增字符串方法)
  9. 【Flink】Disconnect from JobManager responsible for
  10. 视频播放器+android,Android视频播放器
  11. 你是农村人吗,小时候放过牛吗,都有哪些好玩的趣事?
  12. axure产品原型图,元件库导入方法
  13. AES MODE_GCM
  14. iOS SDK开发二三事
  15. SnakeGame(贪吃蛇游戏)
  16. 用CSS3制作一个风车
  17. PHP+Mysql—留言管理系统网站(前端+后端、整套源码)
  18. 乌云公开漏洞查询api 查看乌云最新安全漏洞
  19. 前端Bani Yas
  20. 亚利桑那州接受加密货币纳税的计划受挫

热门文章

  1. 【Java 并发编程】 03 万恶的 Bug 起源—并发编程的三大特性
  2. 安全测试员需知,5大常见的Web安全漏洞及测试方法归纳。
  3. 关于sqrt函数的使用
  4. Ubuntu20.4安装ROS系统教程(自用)
  5. 独立开发变现周刊(第 24期):2021全球范围内数字游民的用户画像是什么?
  6. 充分挖掘 AI 潜能,看英特尔® AMX 如何为千行百业注智赋能
  7. Python爬虫快手视频
  8. 4月16日云栖精选夜读:全球首个!阿里云区块链支持天猫奢侈品正品溯源,会增加你的购买欲望吗?...
  9. Elasticsearch:为 snapshot 设置 NFS 共享
  10. 思科模拟器 | 交换机与路由器的配置汇总【收藏备用】