图论中P、NP、NPC和NP难问题详解
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
时间复杂度
时间复杂度并不是表示一个程序解决问题需要花多 少时间,而是当问题规模扩大后,程序需要的时间 长度增长得有多快。
不管数据有多大,程序处理花的时间始终是那么多 的,我们就说这个程序很好,具有O(1)的时间复杂度, 也称常数级复杂度;数据规模变得有多大,花的时 间也跟着变得有多长,这个程序的时间复杂度就是 O(n)。
Reducibility(“约化”或“归约”):一个问题A可以约化为问题B的含义即 是,可以用解决问题B的解法来解决问题A,或者说,问题A可以“变成” 问题B。 如:一元一次方程可以“归约”为一元二次方程。
问题A可“约化”为问题B直观意义:B的时间复杂度高于或者等于A的时 间复杂度。也就是说,问题A不比问题B难。
NPC问题(补充)
有输出无论如何都不可能为True的逻辑电路 吗?
NPC问题(补充)
其大概意思是说任意一个NP问题的 输入和输出都可以转换成逻辑电路 的输入和输出(想想计算机内部也 不过是一些 0和1的运算),因此对 于一个NP问题来说,问题转化为了 求出满足结果为True的一个 输 入(即一个可行解)。
有些问题很难找到多项式时间的算法(或许根本不存在),例如“找出 无向图中哈密顿回路”问题。但如果给了该问题的一个答案,可以在多项式 时间内判断这个答案是否正确。例如说对于哈密顿回路问题,给一个任意的 回路,很容易判断它是否是哈密顿回路(只要看是不是所有的顶点都在回路 中就可以了)。这里给出NP问题的另一个定义,这种可以在多项式时间内验 证一个解是否正确的问题称为NP问题,亦称为验证问题类。
当然有不是NP问题的问题,即咱猜到了解但是没用,因为咱不能在多项式的时 间里去验证它。 如下面这个:
我们已经知道Hamilton回路是NP问题,因为验证一条路是否恰好经过了每 一个顶点非常容易。但我们把问题换成这样:试问一个图中是否不存在 Hamilton回路。这样问题就没法在多项式的时间里进行验证了,因为除非你试 过所有的路,否则你不敢断定它“没有Hamilton回路”。
很显然,约化具有一项重要的性质:约化具有传递性。如果问题A可约化 为问题B,问题B可约化为问题C,则问题A一定可约化为问题C。
NPC问题(二)
现在再来说一下约化的标准概念就不难理解了:如果能 找到这样一个变化法则,对任意一个程序A的输入,都能 按这个法则变换成程序B的输入,使两程序的输出相同, 那么我们说,问题A可约化为问题B。
注:我们所说的“可约化”是指的可“多项式地”约化 (Polynomial-time Reducible),即变换输入的方法是能在 多项式的时间里完成的。约化的过程只有用多项式的时 间完成才有意义。
NPC问题(三)
NPC问题
约化
NP问题
约化
p问题
p问题
P问题
NPC问题(四)
总结:
定义:同时满足下面两个条件的问题就是NPC问题。 首先,它得是一个NP问题;然后,所有的NP问题都 可以约化到它。
NPC问题是指这样一类NP问题,所有的NP问题都可以用多项式时间划归到 他们中的一个.所以显然NP完全的问题具有如下性质:它可以在多项式时 间内求解,当且仅当所有的其他的NP-完全问题也可以在多项式时间内 求解。这样一来,只要我们找到一个NPC问题的多项式解,所有的NP问题都 可以多项式时间内划归成这个NPC问题,再用多项式时间解决,这样NP就等 于P了.
时间复杂度
时间复杂度
多项式级的复杂 度。 如 O(1),
O(log(n)),O(n^a) 等 ——因为它的 规模n出现在底 数的位置 !
非多项式级的
如:O(a^n)和 O(n!)等!
P (Polynomial,多项式)问题
P问题是可以在多项式时间内被确定机(通常意义的计算 机)解决的问题.
如果一个问题可以找到一个能在多项式的时间里解决它 的算法,那么这个问题就属于P问题。
我们常见到的一些信息奥赛的题目都是P问题。
P问题 VS NP问题 ?
NP(Non-Deterministic Polynomial, 非 确定多项式)问题
首先:NP问题不是非P类问题 ! NP问题,是指可以在多项式时间内被非确定机(他可以猜,他总是能猜到最能满足
你需要的那种选择,如果你让他解决n皇后问题,他只要猜n次就能完成----每次都 是那么幸运)解决的问题.这里有一个著名的问题----千禧难题之首,是说P问题是 否等于NP问题,也即是否所有在非确定机上多项式可解的问题都能在确定机上 用多项式时间求解. NP问题是指可以在多项式的时间里验证一个解的问题,即可以在多项式的时间 里猜出一个解的问题。 像Hamilton回路问题。 在这个题中,找一个解很困难,但验证一个解很容易。
已经知道所有的P类问题都是NP问题。 那反之呢?其实就一句话:证明或 推翻P=NP ——这就是所谓的“NP问题”!
P问题与NP问题的对比
换一种说法,如果一个问题的复杂度是该问题的一个实例规模n的多项式 函数,则这种可以在多项式时间内解决的问题属于P类问题.通俗地称所有复 杂度为多项式时间的问题为易解的问题类,否则为难解的问题。
证明:先证明它至少是一个NP问题,再证明其中一 个已知的NP-Hard问题:其满足NPC问题定义的第二条但不一定要 满足第一条(就是说,NP-Hard问题要比 NPC问题的范围 广,但不一定是NP问题)。
NP-Hard问题同样难以找到多项式的算法,但它不列入我 们的研究范围,因为它不一定是NP问题。即使NPC问题 发现了多项式级的算法,NP-Hard问题有可能仍然无法得 到多项式级的算法。事实上,由于NP-Hard放宽了限定条 件,它将有可能比所有的NPC问题的时间复杂度更高从而 更难以解决。
NPC问题(补充)
NPC问题存在吗?
?
NPC问题(补充)
逻辑电路问题: 给定一个逻辑电路,问是否存在一种输入使 输出为True。
这是第一个NPC问题。其它的NPC问题都是由这个问题约 化而来的。因此,逻辑电路问题是NPC类问题的“鼻祖”。
我们知道,一个逻辑电路由若干个输入,一个输出,若干 “逻辑门”和密密麻麻的线组成,如下图:
简单的说,存在多项式时间的算法的一类问题,称之为P类问题;而像 梵塔问题,推销员旅行问题等问题,至今没有找到多项式时间算法解的一类 问题,称之为NP问题。同时,P类问题是NP问题的一个子集。
NP完全( NP Complete,NPC )问题
NPC问题(一)
人们普遍认为,P=NP不成立。那么多数人相信,存在至少一个不可能有 多项式级复杂度的算法的NP问题——这就是NPC问题。
逻辑电路问题属于NPC问题——它显然属于NP问题, 并且可以证明所有的NP问题都可以约化到它 。
npc问题补充其大概意思是说任意一个np问题的输入和输出都可以转换成逻辑电路的输入和输出想想计算机内部也不过是一些0和1的运算因此对于一个np问题来说问题转化为了求出满足结果为true的一个入即一个可行解
P问题 NP问题 NPC问题 NP难问题
详解
Contents
1
P问题
2
NP问题
3
NPC问题
4
NP难问题