NP问题,P问题,NPC问题详解—黄宇老师《算法分析》笔记
多项式时间归约
1、优化问题可转换为判定问题, 关注同样的结构指标
(1)优化问题:关注特殊结构,优化结构指标
(2)判定问题:不关注指标的最大/小值,关注阙值k
是否存在一个结构,指标与k满足某关系
(3)优化难于判定:优化的解⇒判定的解,判定的解⇏优化的解
很多优化问题在多项式时间内可解 ⇔ 其判定问题在多项式时间内可解
所以,可只关注形式上更便于处理判定问题
2、最大团问题:
①题目描述:无向图G,若子图H为完全图,则H为G的一个团,团的大小为顶点个数
完全图:任意两点有边相连
优化问题 |
判定问题 |
输入:无向图G 优化问题:求G中最大团的大小 |
输入:G与参数k 判定问题:图G中是否存在大小为k的团 |
最大团的大小a,比较a与k,即可得判定问题的解 |
②结构:图;优化指标:团的大小
③判定问题在多项式时间内可解 ⇒ 优化问题多项式时间可解
2、问题间难易关系的定义基于问题间的归约
①问题P可归约到Q(P≤Q):解决P可以间接通过解决Q来实现,是一个转换函数T(x)
(1)P的任意合法输入x,转换成Q的一个合法输入T(x)
(2)假设Q有解决算法,将T(x)输入,得Q的输出
(3)仅在Q对T(x)的输出为YES时,P对x的输出才为YES
②判定问题的解释YES/NO,这为定义两个问题间的归约带来便利
③例子
(1)判定问题:
P1:输入一组布尔值b1,…bn,判定输入值中是否有≥1个为TRUE
P2:输入一组整数值k1,…kn,判定输入值中max是否为正整数
(2)P1到P2归约,T(x)为布尔值→整数,P1输入→P2输入
(3)P2算法输出:TRUE ⇒ P1结果为TRUE
P2输入最大值为正整数(由于T(x),输入是0/1) ⇒ P2输入有≥1个1 ⇒ P1输入有≥1个TRUE
(4)P2算法输出:FALSE ⇒ P1结果为FALSE
P2输入均不是正整数,均为0 ⇒ P1输入均为FALSE
(5)由此证明了,P2输出一定是P1正确输出,因而T(x)为P1到P2的归约
归约代价限定
3、多项式时间可解,记为P问题
①定义:多项式poly(n),存在解决此问题的算法,满足
②P问题可“内聚”为一类,因多项式运算封闭性:f(x)与g(y),加减乘除均是多项式
多项式范围大,均是多项式时间:
O(n):实用算法 |
O(10000n^10000):不可能实用 |
③问题难易程度是相对概念
(1)多项式时间算法 ⇏ 是高效实用的
(2)算法不是多项式 ⇒ 不高效实用
④一类难问题,尚未知道是否有多项式时间算法,相对于这些P类问题是有意义分类
4、多项式时间归约
①问题间归约关系衡量他们的相对难易程度
(1)需要限定归约代价,不能让归约的代价“干扰”对于解决问题代价的衡量
即T(x)也是一种算法,可对其代价分析,定义多项式的时间归约≤p
(2)若T是问题P到Q的归约,且T的代价为其输入模式的多项式,则称P可以多项式时间归约到Q, 记为P≤pQ
②一个难问题,输入转换(O(T(x))代价若是多项式 ⇒ 这一代价对于解决问题的代价而言,是小量
研究难问题之间的难易关系,集中关注多项式时间归约
③问题间的归约是两个问题之间的一种二元关系,刻画之间的难易程度,
即:若P≤pQ,则P的难度≤Q的难度。因:
(1)若已得到解决Q的算法 ⇒ 一个解决P的算法(高效归约的存在,很容易得到)
(2)解决P的算法 ⇏ 解决Q的算法
④多项式时间归约关系是一个传递关系
即对问题P、Q、R,若P≤pQ,Q≤p R,则P≤p R
可以对所有问题按难度不同分类
NP完全问题
期望算法高效,合理期望是:至少是多项式时间的O(nc)
难问题:尚未找到多项式时间的算法,又无法证明多项式时间的算法一定不存在
1、
P问题 |
在多项式时间内可解决的问题 |
NP问题 |
非确定性算法在多项式时间内可解,即该问题的解在多项式时间内可验证: |
(1)非确定的任意猜测该问题的一个解 (2)可以在多项式时间内检查这个解是不是该问题的一个解 |
②例子(最大团)CLIQUE ∈ NP
证明:看其判定问题。
(1)猜测CLIQUE问题的一个解,此解形式为图中的k个顶点
(不满足此形式的解可直接判定它不是一个解)
(2)对任意猜测的解中的k个顶点,验证是否所有点对之间都有边。
若是:验证了猜测的解是CLIQUE问题的一个解
若否:猜测的解不是一个解
(3)猜测过程可以在O(n)的时间内完成
验证过程可以在O(k2)= O(n2)内完成
③猜想,无法证明其成立与否
P类问题是NP类问题的真子集,NP比P大很多
2、NP难问题与NP完全问题
①定义:一个问题P
NP难问题 |
若 ∀ Q ∈ NP, Q≤p P |
NP完全问题 |
若P ∈ NP,且P是NP难问题 |
TIPS:
(1)一个NP难问题的难度没有上界,若将讨论的范围限定到NP问题,则得到NP完全问题的概念
(2)NP完全问题是所有NP问题中最难的问题,研究此类问题是研究计算复杂性的基础
②NP问题定义引出了未解问题:P是否等于NP
(1)若任意一个NP完全问题可在多项式时间解决,则所有NP问题均可在多项式时间解决
即P=NP
(2)若证明任意一个NP完全问题不存在多项式时间解,则所有NP完全问题均不可能在多项式时间解决,即P≠NP
3、NP完全性证明的初步知识
①可用定义证明问题的NP完全性,但困难
②根据NP完全性定义的特征:若已知一个问题是NP完全问题,则变简单
即假设已知问题P是NP完全的,要证明问题Q是NP完全的
(1)只需将P在多项式时间内归约到Q
(2)根据NP完全性定义,有 X∈NP,X≤p P,P≤p Q
(3)根据多项式时间归约关系传递性,有 X∈NP,X≤p Q
(4)因而,有Q是NP难的。
(5)若再证明Q∈NP问题,则证明了Q的NP完全性
③上述思路需要有一个“种子”问题,即第一个证明NP完全性的问题,即SAT问题无需证明,作为默认
④NP完全性证明的关键变成了问题间的归约(技巧性强,有难度)
4、一般问题与特例问题
①若一个问题的特例P是NP完全的⇒ 其一般情况P’也是NP完全的
证明:将P多项式时间内归约到P’,这一归约简单,只需给一般问题进行某些具体的设定即可
(将可变参数设定为某个特定的值)
②例子
划分问题 partition(特例) |
背包问题knapsack(一般) |
|
输入实例 |
N个物品,其大小分别为s1,…sn |
N个物品,其大小分别为s1,…sn,每个物品的价值为c1,…cn;参数k与C |
判定问题 |
是否可将输入物品划分为两个子集, 使这两个子集中物品大小之和相等 |
是否可在背包中装若干物品, 使背包中物品大小之和≤C,且价值之和≥k |
假设已知partition问题是NP完全的,要证knapsack问题是NP完全的
(1)要构建从partition到knapsack的归约(P≤p K)
(2)knapsack是更一般性问题,只需设定所有物品价值与其大小相等
5)进一步再证明knapsack是NP的 ⇒ 则就证明了knapsack是NP完全问题
5、等价的问题
①两个问题间有某种等价性,很容易得到它们之间的归约性
②例子
独立集:一个点集 中任意两点间无边相连,大小为其中节点个数
点覆盖:图G中任意一条边均与顶点集合C中的某个顶点相关联,则C为G的一个点覆盖,大小为点个数
独立集independent-set |
点覆盖vertex-cover |
|
输入实例 |
无向图G,参数k |
无向图G,参数k |
判定问题 |
G中是否存在大小为k的独立集 |
G中是否存在大小为k的点覆盖 |
NP问题,P问题,NPC问题详解—黄宇老师《算法分析》笔记相关推荐
- 各种音视频编解码学习详解之 编解码学习笔记(三):Mpeg系列——Mpeg 1和Mpeg 2
最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解很多小的篇幅,方便阅读.大神博客传送门: ...
- 各种音视频编解码学习详解之 编解码学习笔记(四):Mpeg系列——Mpeg 4
最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...
- 孙鑫VC++深入详解第三章学习笔记
第三章 3.1创建MFC AppWizard 如何利用vs2019创建MFC应用见参考文献[1] 需要注意的地方有 [1] 创建MFC单文档应用程序 [2]开启类视图窗口 3.2基于MFC的程序框架剖 ...
- 各种音视频编解码学习详解之 编解码学习笔记(十三):容器
最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...
- 各种音视频编解码学习详解之 编解码学习笔记(八):Real系列
最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...
- 各种音视频编解码学习详解之 编解码学习笔记(六):H.26x系列
最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...
- 各种音视频编解码学习详解之 编解码学习笔记(十):Ogg系列
最近在研究音视频编解码这一块儿,看到@bitbit大神写的[各种音视频编解码学习详解]这篇文章,非常感谢,佩服的五体投地.奈何大神这边文章太长,在这里我把它分解成很多小的篇幅,方便阅读.大神博客传送门 ...
- 明日之后多贝雪山服务器在安卓系统叫什么,明日之后多贝雪山NPC坐标点 多贝雪山NPC位置详解...
现在明日之后游戏中有不少小伙伴都已经到了7级庄园可以进多贝雪山了.大家都知道也野外地图都是有随机NPC的任务的,那这些NPC都经常出没在什么地方呢?凉音跑了几天的地图整理了一下,希望对大家有帮助哦.当 ...
- 海岛奇兵服务器修改,海岛奇兵NPC刷新详解 官网阐述未来更改变动
海岛奇兵NPC刷新机制到底是怎么样的呢?如何加快NPC的刷新速度呢?赶紧一起来看看海岛奇兵官方的讲解吧! 一.当前版本规则说明 1.敌方入侵数量上限,包括PVP玩家基地以及NPC基地. 2.敌方入侵数 ...
- 学习《FreeRTOS源码详解与应用开发》笔记
1.注意:任务函数内部定义局部变量的内存大小不能大于此任务堆栈内存的大小. 2.FreeRTOS定义任务优先级时,0优先级(空闲中断占用)和最高优先级31级(定时器占用)不能用. 3.用start_t ...
最新文章
- 一款基于jquery和css3的头像恶搞特效
- Java+MyEclipse+Tomcat (二)配置Servlet及简单实现表单提交
- 为什么要用Dubbo-远程通信背景
- 关于socket组播和ssdp(一)[修改1.2]
- nodejs初步搭建HelloWord
- 程序员应该练练太极拳
- java讲师北京_Java工程师提升空间大,前途好,该如何跨入它的大门呢?
- python语言和汇编语言_python语言属于汇编语言吗?
- 插桩 java_Javassist进行方法插桩
- 中文讲解 机器学习 Machine Learning in Business 第二版,约翰.赫尔(John C. Hull ),Chenghsi Hsieh老师
- 坑人的青旅乐山峨眉两日游
- 应届生产品助理/经理面试,应当多谈点什么?
- office2016镜像安装详细教程
- 新天龙官网服务器更新消息,《新天龙八部》1月20日全服更新维护公告
- 【LVGL学习笔记】(三)控件使用
- STM32F4驱动NEC协议的红外接收头
- numpy.corrcoef 计算相关系数
- UGNXCAM加工模块二次开发视频教程全集(全套视频教程)_NXopen-UG二次开发_新浪博客
- 4个最糟糕的用户体验设计
- 小程序--腾讯地图导航
热门文章
- YII2 高级版本 发送163邮件
- android spannablestring设置字体颜色,Android SpannableString设置超链接、颜色、字体等属性...
- 8-子午和卯酉圈曲率半径
- Busiest Computing Nodes (线段树维护区间最小值)
- 基因加性方差、显性方差与上位性方差定义
- 荣耀4a android art,荣耀4A黑科技大揭秘,真是给工程师给跪了!!
- 读《所谓情商高,就是会说话》笔记
- 都说学3D建模赚钱,到底学了能做什么?
- Requirement already satisfied问题
- Java中double转String