什么是P问题、NP问题和NPC问题资料
世界十大难题
世界十大难题1、NP完全问题(NP-C问题)NP完全问题(NP-C问题),是世界七大数学难题之一。
NP的英文全称是Non-deterministicPolynomial的问题,即多项式复杂程度的非确定性问题。
简单的写法是NP=P?,问题就在这个问号上,到底是NP等于P,还是NP不等于P。
NP就是Non-deterministicPolynomial的问题,也即是多项式复杂程度的非确定性问题。
而如果任何一个NP问题都能通过一个多项式时间算法转换为某个NP问题,那么这个NP问题就称为NP完全问题(Non-deterministicPolynomialcompleteproblem)。
NP完全问题也叫做NPC问题。
2、霍奇猜想霍奇猜想是代数几何的一个重大的悬而未决的问题。
由威廉·瓦伦斯·道格拉斯·霍奇提出,它是关于非奇异复代数簇的代数拓扑和它由定义子簇的多项式方程所表述的几何的关联的猜想,属于世界七大数学难题之一。
二十世纪的数学家们发现了研究复杂对象的形状的强有力的办法。
基本想法是问在怎样的程度上,我们可以把给定对象的形状通过把维数不断增加的简单几何营造块粘合在一起来形成。
3、庞加莱猜想庞加莱猜想(Poincaréconjecture)是法国数学家庞加莱提出的一个猜想,其中三维的情形被俄罗斯数学家格里戈里·佩雷尔曼于2003年左右证明。
2006年,数学界最终确认佩雷尔曼的证明解决了庞加莱猜想。
1904年,法国数学家亨利·庞加莱提出了一个拓扑学的猜想:“任何一个单连通的,闭的三维流形一定同胚于一个三维的球面。
”简单地说,一个闭的三维流形就是一个有边界的三维空间;单连通就是这个空间中每条封闭的曲线都可以连续的收缩成一点,或者说在一个封闭的三维空间,假如每条封闭的曲线都能收缩成一点,这个空间就一定是一个三维圆球。
4、黎曼假设黎曼猜想是关于黎曼ζ函数ζ(s)的零点分布的猜想,由数学家黎曼于1859年提出。
np问题 通俗解释
np问题通俗解释
NP问题是指“非确定性多项式时间”问题,也称为不可解问题。
它是计算机科学中的一个重要问题类别。
通俗来说,NP问题是指那些可以在多项式时间内验证是否解
答正确的问题,但尚未找到可以在多项式时间内解决的算法。
也就是说,虽然我们可以在多项式时间内检查一个给定解是否正确,但我们目前还没有找到一种高效的方法来找到一个解。
在计算理论中,NP问题是与P问题相对的一个概念。
P问题
是指可以在多项式时间内解决的问题。
一个经典的例子是旅行商问题。
在旅行商问题中,我们需要找到一条路径,使得旅行商可以经过多个城市,每个城市只到达一次,并且回到起点,同时总路径长度最短。
虽然我们可以在多项式时间内计算出给定路径的总长度,但当前还没有找到一种可以在多项式时间内找到最短路径的方法。
目前来说,还没有找到一种通用的解决NP问题的方法。
因此,研究人员一直在努力寻找解决这些问题的有效算法,或者找到一种方法来证明这些问题不存在多项式时间解决的算法。
P、NP、NPC详解区分
这或许是众多OIer最大的误区之一。
你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。
你要知道,大多数人此时所说的NP问题其实都是指的NPC问题。
他们没有搞清楚NP问题和NPC问题的概念。
NP问题并不是那种“只有搜才行”的问题,NPC问题才是。
好,行了,基本上这个误解已经被澄清了。
下面的内容都是在讲什么是P问题,什么是NP问题,什么是NPC问题,你如果不是很感兴趣就可以不看了。
接下来你可以看到,把NP问题当成是 NPC问题是一个多大的错误。
还是先用几句话简单说明一下时间复杂度。
时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。
也就是说,对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的规模变大到数百倍后,程序运行时间是否还是一样,或者也跟着慢了数百倍,或者变慢了数万倍。
不管数据有多大,程序处理花的时间始终是那么多的,我们就说这个程序很好,具有O(1)的时间复杂度,也称常数级复杂度;数据规模变得有多大,花的时间也跟着变得有多长,这个程序的时间复杂度就是O(n),比如找n个数中的最大值;而像冒泡排序、插入排序等,数据扩大2倍,时间变慢4倍的,属于O(n^2)的复杂度。
还有一些穷举类的算法,所需时间长度成几何阶数上涨,这就是O(a^n)的指数级复杂度,甚至O(n!)的阶乘级复杂度。
不会存在O(2*n^2)的复杂度,因为前面的那个“2”是系数,根本不会影响到整个程序的时间增长。
同样地,O (n^3+n^2)的复杂度也就是O(n^3)的复杂度。
因此,我们会说,一个O(0.01*n^3)的程序的效率比O(100*n^2)的效率低,尽管在n很小的时候,前者优于后者,但后者时间随数据规模增长得慢,最终O(n^3)的复杂度将远远超过O(n^2)。
我们也说,O(n^100)的复杂度小于O(1.01^n)的复杂度。
P-NP-NPC三者问题阐述
P NP NPC三者问题阐述1)”P对NP问题”是什么意思?首先说明一下问题的复杂性和算法的复杂性的区别,下面只考虑时间复杂性。
算法的复杂性是指解决问题的一个具体的算法的执行时间,这是算法的性质;问题的复杂性是指这个问题本身的复杂程度,是问题的性质.比如对于排序问题,如果我们只能通过元素间的相互比较来确定元素间的相互位置,而没有其他的附加可用信息,则排序问题的复杂性是O(nlgn),但是排序算法有很多,冒泡法是O(n^2),快速排序平均情况下是O(nlgn)等等,排序问题的复杂性是指在所有的解决该问题的算法中最好算法的复杂性。
问题的复杂性不可能通过枚举各种可能算法来得到,一般都是预先估计一个值,然后从理论上证明。
为了研究问题的复杂性,我们必须将问题抽象,为了简化问题,我们只考虑一类简单的问题,判定性问题,即提出一个问题,只需要回答yes或者no的问题。
任何一般的最优化问题都可以转化为一系列判定性问题,比如求图中从A到B的最短路径,可以转化成:从A 到B是否有长度为1的路径?从A到B是否有长度为2的路径?…从A到B是否有长度为k的路径?如果问到了k的时候回答了yes,则停止发问,我们可以说从A到B的最短路径就是k。
如果一个判定性问题的复杂度是该问题的一个实例的规模n的多项式函数,则我们说这种可以在多项式时间内解决的判定性问题属于P类问题。
P类问题就是所有复杂度为多项式时间的问题的集合.然而有些问题很难找到多项式时间的算法(或许根本不存在),比如找出无向图中的哈米尔顿回路问题,但是我们发现如果给了我们该问题的一个答案,我们可以在多项式时间内判断这个答案是否正确。
比如说对于哈米尔顿回路问题,给一个任意的回路,我们很容易判断他是否是哈米尔顿回路(只要看是不是所有的顶点都在回路中就可以了)。
这种可以在多项式时间内验证一个解是否正确的问题称为NP问题.显然,所有的P类问题都是属于NP问题的,但是现在的问题是,P是否等于NP?这个问题至今还未解决。
什么是P问题、NP问题和NPC问题PPT课件
比方说,我RP很好,在程序中需要枚举时,我可 以一猜一个准。
现在某人拿到了一个求最短路径的问题,问从起点 到终点是否有一条小于100个单位长度的路线。它 根据数据画好了图,但怎么也算不出来,于是来问 我:你看怎么选条路走得最少?
2020/10/13
12
NPC问题
人们如此坚信P≠NP是有原因的,就是在研究 NP问题的过程中找出了一类非常特殊的NP问 题叫做NP-完全问题,也即所谓的 NPC问题。 C是英文单词“完全”的第一个字母。正是 NPC问题的存在,使人们相信P≠NP。
2020/10/13
8
NP问题
我说,我RP很好,肯定能随便给你指条很短的路出来。然后 我就胡乱画了几条线,说就这条吧。那人按我指的这条把权 值加起来一看,嘿,神了,路径长度98,比100小。于是答 案出来了,存在比100小的路径。
别人会问他这题怎么做出来的,他就可以说,因为我找到了 一个比100 小的解。
因此,我们会说,一个O(0.01*n^3)的程序的效率 比O(100*n^2)的效率低,尽管在n很小的时候,前 者优于后者,但后者时间随数据规模增长得慢,最 终O(n^3)的复杂度将远远超过O(n^2)。我们也说, O(n^100)的复杂度小于O(1.01^n)的复杂度。
2020/10/13
4
先用几句话简单说明一下时间复杂度
2020/10/13
10
NP问题
之所以要定义NP问题,是因为通常只有NP问 题才可能找到多项式的算法。
我们不会指望一个连多项式地验证一个解都不 行的问题存在一个解决它的多项式级的算法。
很显然,所有的P类问题都是NP问题。也就是 说,能多项式地解决一个问题,必然能多项式 地验证一个问题的解——既然正解都出来了, 验证任意给定的解也只需要比较一下就可以了。
NP难问题的概念
P问题、NP问题、NPC问题、NP难问题的概念2010-04-15 21:35 | (分类:默认分类)转自/view/3e968900a6c30c2259019e8f.html你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。
你要知道,大多数人此时所说的NP问题其实都是指的NPC问题。
他们没有搞清楚NP问题和NPC问题的概念。
NP问题并不是那种“只有搜才行”的问题,NPC问题才是。
好,行了,基本上这个误解已经被澄清了。
下面的内容都是在讲什么是P问题,什么是NP问题,什么是NPC问题,你如果不是很感兴趣就可以不看了。
接下来你可以看到,把NP问题当成是NPC问题是一个多大的错误。
还是先用几句话简单说明一下时间复杂度。
时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。
也就是说,对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的规模变大到数百倍后,程序运行时间是否还是一样,或者也跟着慢了数百倍,或者变慢了数万倍。
不管数据有多大,程序处理花的时间始终是那么多的,我们就说这个程序很好,具有O(1)的时间复杂度,也称常数级复杂度;数据规模变得有多大,花的时间也跟着变得有多长,这个程序的时间复杂度就是O(n),比如找n个数中的最大值;而像冒泡排序、插入排序等,数据扩大2倍,时间变慢4倍的,属于O(n^2)的复杂度。
还有一些穷举类的算法,所需时间长度成几何阶数上涨,这就是O(a^n)的指数级复杂度,甚至O(n!)的阶乘级复杂度。
不会存在O(2*n^2)的复杂度,因为前面的那个“2”是系数,根本不会影响到整个程序的时间增长。
同样地,O (n^3+n^2)的复杂度也就是O(n^3)的复杂度。
因此,我们会说,一个O(0.01*n^3)的程序的效率比O(100*n^2)的效率低,尽管在n很小的时候,前者优于后者,但后者时间随数据规模增长得慢,最终O(n^3)的复杂度将远远超过O(n^2)。
离散数学P和NP类问题比较
离散数学P和NP类问题比较离散数学中的P类和NP类问题是计算机科学中非常重要的概念。
它们帮助我们确定问题的复杂性,并为算法设计和问题求解提供了基础。
本文将比较P类和NP类问题的特点和区别。
一、P类问题P类问题是可以在多项式时间内解决的问题。
也就是说,存在一种算法可以在输入规模的多项式函数内,有效地计算出问题的解。
例如,排序、求和等基本算法属于P类问题。
P类问题具有以下特点:1. 可以在多项式时间内解决。
2. 可以使用确定性算法或非确定性算法进行求解。
3. 可以验证问题的解的正确性。
二、NP类问题NP类问题是可以在多项式时间内验证解的问题。
虽然无法在多项式时间内求解,但可以在多项式时间内验证给定解是否为问题的解。
例如,旅行商问题和背包问题就属于NP类问题。
NP类问题具有以下特点:1. 无法在多项式时间内求解。
2. 可以使用非确定性算法验证解的正确性。
3. 如果一个P类问题可以在多项式时间内约化为NP类问题,那么该P类问题就属于NP类问题。
三、P类和NP类问题的关系P类和NP类问题之间存在许多关系和区别。
1. P类问题是NP类问题的一个子集。
也就是说,所有的P类问题都属于NP类问题。
2. P类问题可以在多项式时间内求解,而NP类问题只能在多项式时间内验证解的正确性。
3. 目前还无法确定P类问题是否等于NP类问题。
这是著名的P与NP问题,其解决将对计算机科学有极其重要的影响。
4. 如果某个NP类问题可以在多项式时间内求解,那么它将成为P 类问题。
这样的问题被称为NP完全问题。
四、NP完全问题NP完全问题是NP类问题中最困难的一类问题。
如果一个NP问题可以在多项式时间内约化为一个已知的NP完全问题,那么该问题本身也属于NP完全问题。
著名的NP完全问题包括旅行商问题、图着色问题和集合覆盖问题等。
NP完全问题具有以下特点:1. 它是NP类问题中最困难的问题。
2. 尚未找到多项式时间内求解NP完全问题的算法,因此被认为无法在多项式时间内求解。
(算法分析设计)P,NP,NPC,NP-hard问题
NPC问题
约化/归约(Reducibility) 一个问题A可以约化为问题B的含义即是,
可以用问题B的解法解决问题A,或者说, 问题A可以“变成”问题B。 例子
➢ 求解一个一元一次方程可以约化为求解一个一 元二次方程
➢ Hamilton回路可以约化为TSP问题
NPC问题
NPC问题
➢ 它得是一个NP问题 ➢ 所有的NP问题都可以多项式时间内约化到它
P,NP,NPC,NP-hard问题
NP问题
NP问题不是非P类问题。NP问题是指可以在 多项式的时间里验证一个解的问题。
例如,
➢ 一条路是否Hamilton回路? ➢ 一个图中是否不存在Hamilton回Leabharlann ?P属于NP ,但是P=NP?
➢ 信息学的巅峰,类似于物理学中的大统一和数 学中的歌德巴赫猜想
所有的NP问题都能约化成NPC问题,那么只 要任意一个NPC问题找到了一个多项式的算 法,那么所有的NP问题都能用这个算法解 决了,NP也就等于P 了
NP-Hard问题
• NP-Hard问题是这样一种问题,它满足NPC 问题定义的第二条但不一定要满足第一条 (就是说,NP-Hard问题要比 NPC问题的范 围广)
P问题、NP问题、NP完全问题和NP难问题
P问题、NP问题、NP完全问题和NP难问题在讲P类问题之前先介绍两个个概念:多项式,时间复杂度。
(知道这两概念的可以⾃动跳过这部分)1、多项式:axn-bxn-1+c恩....就是长这个样⼦的,叫x最⾼次为n的多项式....咳咳,别嫌我啰嗦。
有些⼈说不定还真忘了啥是多项式了。
例如第⼀次看到的鄙⼈→_→2、时间复杂度我们知道在计算机算法求解问题当中,经常⽤时间复杂度和空间复杂度来表⽰⼀个算法的运⾏效率。
空间复杂度表⽰⼀个算法在计算过程当中要占⽤的内存空间⼤⼩,这⾥暂不讨论。
时间复杂度则表⽰这个算法运⾏得到想要的解所需的计算⼯作量,他探讨的是当输⼊值接近⽆穷时,算法所需⼯作量的变化快慢程度。
举个例⼦:冒泡排序。
在计算机当中,排序问题是最基础的,将输⼊按照⼤⼩或其他规则排好序,有利于后期运⽤数据进⾏其他运算。
冒泡排序就是其中的⼀种排序算法。
假设⼿上现在有n个⽆序的数,利⽤冒泡排序对其进⾏排序,①⾸先⽐较第1个数和第2个数,如果后者>前者,就对调他们的位置,否则不变②接着⽐较第2个数和第3个数,如果后者>前者,就对调他们的位置,否则不变③⼀直向下⽐较直到第n-1和第n个数⽐较完,第⼀轮结束。
(这时候最⼤的数移动到了第n个数的位置)④重复前三步,但是只⽐较到第n-1个数(将第⼆⼤的数移动到第n-1个数位置)⑤持续每次对越来越少的元素重复上⾯的步骤,直到没有任何⼀对数字需要⽐较。
举个实例:5,4,3,2,1,对其进⾏排序,先是⽐较5跟4变成4,5,3,2,1,第⼀轮结束后变成43215,可以计算,当对其排序完正好要经过4+3+2+1=10次⽐较,当然这是最复杂的情况,即完全反序。
可以知道对于n个数,⾄多要经过1+2+...+n-1即(n^2-n)/2次⽐较才能排好序。
这个式⼦⾥n的最⾼次阶是2,可知道当n→∞时,⼀次性对其⽐较次数影响很⼩,所以我们把这个算法的时间复杂度⽐作:o(n^2)。
取其最⾼次,可以看出,这是⼀个时间复杂度为多项式的表⽰⽅式。
nphard问题的解释
nphard问题的解释
NP-hard问题是计算复杂性理论中的一个重要概念,它描述了一类特殊的问题。
在解释NP-hard问题之前,我们需要先理解几个基本概念。
P问题:指的是那些其解可以在多项式时间内被验证的问题。
NP问题:指的是那些解的正确性可以在多项式时间内被验证的问题。
NP-complete问题(NPC问题):既是NP问题也是NP-hard问题的特殊情况,即那些既困难又完整的問題,也就是说,如果一个问题是NP问题,那么它一定可以被多项式时间规约到一个已知的NPC问题上。
NP-hard问题的定义是:一个问题如果是NP-hard的,那么这个问题至少和已知的某个NP-complete问题是等价的。
也就是说,任何一个NP-hard问题都可以在多项式时间内归约(映射)到一个已知的NP-complete问题上。
因此,NP-hard问题是一类非常困难的问题,它们比一般的N P问题更加困难,因为它们不仅要求解的问题能在多项式时间内被验证,而且还要求解的问题至少和某个已知的NPC 问题是等价的。
直观地说,如果我们在解决一个问题时,发现没有任何
已知的有效算法,即便使用现有的最先进的算法也无法在合理的时间内得到解决,那么这个问题就可能是NP-hard的。
例如,著名的“停机问题”(Halting Problem)就是一个典型的NP-hard问题,它问的是给定一个程序和输入,能否在有限时间内判断该程序是否终止。
这个问题已经被证明是NP-hard的,因为它无法在多项式时间内被解决。
总结一下,NP-hard问题是一类非常难以解决的问题,它们至少和已知的某个NPC问题是等价的,这意味着找到这类问题的多项式时间算法非常困难。
什么是P问题、NP问题和NPC问题
先用几句话简单说明一下时间复杂度
时间复杂度并不是表示一个程序解决问题需要花多少 时间,而是当问题规模扩大后,程序需要的时间长度 增长得有多快。 也就是说,对于高速处理数据的计算机来说,处理某 一个特定数据的效率不能衡量一个程序的好坏,而应 该看当这个数据的规模变大到数百倍后,程序运行时 间是否还是一样,或者也跟着慢了数百倍,或者变慢 了数万倍。
Hamilton回路。 问题是这样的:给你一个图,问你能否找到一条经过每个顶 点一次且恰好一次(不遗漏也不重复)最后又走回来的路 (满足这个条件的路径叫做Hamilton回路)。 这个问题现在还没有找到多项式级的算法。事实上,这个问 题就是我们后面要说的NPC问题。
P类问题
如果一个问题可以找到一个能在多项式的时间 里解决它的算法,那么这个问题就属于P问题。 P是英文单词多项式的第一个字母。
约化
约化具有一项重要的性质:约化具有传递性。如果问 题A可约化为问题B,问题B可约化为问题C,则问题 A一定可约化为问题C。 约化的标准概念:如果能找到这样一个变化法则,对 任意一个程序A的输入,都能按这个法则变换成程序 B的输入,使两程序的输出相同,那么我们说,问题 A可约化为问题B。 我们所说的“可约化”是指的可“多项式地”约化 (Polynomial-time Reducible),即变换输入的方法 是能在多项式的时间里完成的。约化的过程只有用多 项式的时间完成才有意义。
NP问题
关键是,人们想知道,是否所有的NP问题都 是P类问题。 所有对NP问题的研究都集中在一个问题上, 即究竟是否有P=NP? 目前为止这个问题还“啃不动”。但是,一个 总的趋势、一个大方向是有的。人们普遍认为, P=NP不成立,也就是说,多数人相信,存在 至少一个不可能有多项式级复杂度的算法的 NP问题。
图论中P、NP、NPC和NP难问题详解
NPC问题(三)
NPC问题
约化
NP问题
约化
p问题
p问题
P问题
NPC问题(四)
总结:
定义:同时满足下面两个条件的问题就是NPC问题。 首先,它得是一个NP问题;然后,所有的NP问题都 可以约化到它。
时间复杂度
时间复杂度
多项式级的复杂 度。 如 O(1),
O(log(n)),O(n^a) 等 ——因为它的 规模n出现在底 数的位置 !
非多项式级的
如:O(a^n)和 O(n!)等!
P (Polynomial,多项式)问题
P问题是可以在多项式时间内被确定机(通常意义的计算 机)解决的问题.
如果一个问题可以找到一个能在多项式的时间里解决它 的算法,那么这个问题就属于P问题。
当然有不是NP问题的问题,即咱猜到了解但是没用,因为咱不能在多项式的时 间里去验证它。 如下面这个:
我们已经知道Hamilton回路是NP问题,因为验证一条路是否恰好经过了每 一个顶点非常容易。但我们把问题换成这样:试问一个图中是否不存在 Hamilton回路。这样问题就没法在多项式的时间里进行验证了,因为除非你试 过所有的路,否则你不敢断定它“没有Hamilton回路”。
逻辑电路问题属于NPC问题——它显然属于NP问题, 并且可以证明所有的NP问题都可以约化到它 。
NPC问题(补充)
NPC问题存在吗?
?
NPC问题(补充)
逻辑电路问题: 给定一个逻辑电路,问是否存在一种输入使 输出为True。
图论中PNPNPC和NP难问题详解
? 在这个题中,找一个解很困难,但验证一个解很容易。
? 当然有不是NP问题的问题,即咱猜到了解但是没用,因为咱不能在多项式的时 间里去验证它。 如下面这个:
我们已经知道Hamilton回路是NP问题,因为验证一条路是否恰好经过了每 一个顶点非常容易。但我们把问题换成这样:试问一个图中是否不存在 Hamilton回路。这样问题就没法在多项式的时间里进行验证了,因为除非你试 过所有的路,否则你不敢断定它“没有Hamilton 回路”。
已经知道所有的P类问题都是NP问题。 那反之呢?其实就一句话:证明或 推翻P=NP ——这就是所谓的“NP问题”!
P问题与NP问题的对比
换一种说法,如果一个问题的复杂度是该问题的一个实例规模n的多项式 函数,则这种可以在多项式时间内解决的问题属于P类问题.通俗地称所有复 杂度为多项式时间的问题为易解的问题类,否则为难解的问题。
? 很显然,约化具有一项重要的性质:约化具有传递性。如果问题A可约化 为问题B,问题B可约化为问题C,则问题A一定可约化为问题C。
NPC问题(二)
? 现在再来说一下约化的标准概念就不难理解了:如果能 找到这样一个变化法则,对任意一个程序 A的输入,都能 按这个法则变换成程序 B的输入,使两程序的输出相同, 那么我们说,问题 A可约化为问题B。
? NPC问题是指这样一类NP问题,所有的NP问题都可以用多项式时间划归到 他们中的一个.所以显然NP完全的问题具有如下性质:它可以在多项式时 间内求解,当且仅当所有的其他的NP-完全问题也可以在多项式时间内 求解。这样一来,只要我们找到一个NPC问题的多项式解,所有的NP问题都 可以多项式时间内划归成这个NPC问题,再用多项式时间解决,这样NP就等 于P了.
P问题、NP问题、NPC问题的概念
P问题、NP问题、NPC问题的概念这或许是众多OIer最大的误区之一。
你会经常看到网上出现“这怎么做,这不是NP问题吗”、“这个只有搜了,这已经被证明是NP问题了”之类的话。
你要知道,大多数人此时所说的NP问题其实都是指的NP C问题。
他们没有搞清楚NP问题和NPC问题的概念。
NP问题并不是那种“只有搜才行”的问题,NPC 问题才是。
好,行了,基本上这个误解已经被澄清了。
下面的内容都是在讲什么是P问题,什么是NP问题,什么是NPC问题,你如果不是很感兴趣就可以不看了。
接下来你可以看到,把NP问题当成是NPC问题是一个多大的错误。
还是先用几句话简单说明一下时间复杂度。
时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。
也就是说,对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的规模变大到数百倍后,程序运行时间是否还是一样,或者也跟着慢了数百倍,或者变慢了数万倍。
不管数据有多大,程序处理花的时间始终是那么多的,我们就说这个程序很好,具有O(1)的时间复杂度,也称常数级复杂度;数据规模变得有多大,花的时间也跟着变得有多长,这个程序的时间复杂度就是O(n),比如找n个数中的最大值;而像冒泡排序、插入排序等,数据扩大2倍,时间变慢4倍的,属于O(n^2)的复杂度。
还有一些穷举类的算法,所需时间长度成几何阶数上涨,这就是O(a^n)的指数级复杂度,甚至O(n!)的阶乘级复杂度。
不会存在O(2*n^2)的复杂度,因为前面的那个“2”是系数,根本不会影响到整个程序的时间增长。
同样地,O(n^3+n^2)的复杂度也就是O(n^3)的复杂度。
np 问题
P问题是可以在多项式时间内被确定机(通常意义的计算机)解决的问题.
NP( 非确定多项式)问题,是指可以在多项式时间内被非确定机(他可以猜,他总是能猜到最能满足你需要的那种选择,如果你让他解决n皇后问题,他只要猜n 次就能完成----每次都是那么幸运)解决的问题.
NP完全NPC问题是指这样一类NP问题,所有的NP问题都可以用多项式时间划归到他们中的一个.所以显然NP完全的问题具有如下性质:它可以在多项式时间内求解,当且仅当所有的其他的NP-完全问题也可以在多项式时间内求解。
这样一来,只要我们找到一个NPC问题的多项式解,所有的NP问题都可以多项式时间内划归成这个NPC问题,再用多项式时间解决,这样NP就等于P了。
P-NP-NPC三者问题阐述
P NP NPC三者问题阐述1)"P对NP问题"是什么意思?首先说明一下问题的复杂性和算法的复杂性的区别,下面只考虑时间复杂性。
算法的复杂性是指解决问题的一个具体的算法的执行时间,这是算法的性质;问题的复杂性是指这个问题本身的复杂程度,是问题的性质。
比如对于排序问题,如果我们只能通过元素间的相互比较来确定元素间的相互位置,而没有其他的附加可用信息,则排序问题的复杂性是O(nlgn),但是排序算法有很多,冒泡法是O(n^2),快速排序平均情况下是O(nlgn)等等,排序问题的复杂性是指在所有的解决该问题的算法中最好算法的复杂性。
问题的复杂性不可能通过枚举各种可能算法来得到,一般都是预先估计一个值,然后从理论上证明。
为了研究问题的复杂性,我们必须将问题抽象,为了简化问题,我们只考虑一类简单的问题,判定性问题,即提出一个问题,只需要回答yes或者no的问题。
任何一般的最优化问题都可以转化为一系列判定性问题,比如求图中从A到B的最短路径,可以转化成:从A 到B是否有长度为1的路径?从A到B是否有长度为2的路径?…从A到B是否有长度为k 的路径?如果问到了k的时候回答了yes,则停止发问,我们可以说从A到B的最短路径就是k。
如果一个判定性问题的复杂度是该问题的一个实例的规模n的多项式函数,则我们说这种可以在多项式时间内解决的判定性问题属于P类问题。
P类问题就是所有复杂度为多项式时间的问题的集合。
然而有些问题很难找到多项式时间的算法(或许根本不存在),比如找出无向图中的哈米尔顿回路问题,但是我们发现如果给了我们该问题的一个答案,我们可以在多项式时间内判断这个答案是否正确。
比如说对于哈米尔顿回路问题,给一个任意的回路,我们很容易判断他是否是哈米尔顿回路(只要看是不是所有的顶点都在回路中就可以了)。
这种可以在多项式时间内验证一个解是否正确的问题称为NP问题。
显然,所有的P 类问题都是属于NP问题的,但是现在的问题是,P是否等于NP?这个问题至今还未解决。
对p和np问题的介绍
P/NP问题是史提芬·古克于1971年首次提出 ,P/NP问题是 克雷数学研究所高额悬赏的七个千禧年难题之一,同时也是计 算机科学领域的最大难题,关系到计算机完成一项任务的速度 到底有多快。 2010年8月7日,来自惠普实验室的科学家Vinay Deolalikar声称已经解决了“P/NP问题” ,并公开了证明文件。 但其后被其他学者发mial ) P是一个判定问题类,这些问题可以用一个确定性算法在多项式 时间内判定或解出。如果一个判定性问题的复杂度是该问题的一个 实例的规模n的多项式函数,则我们说这种可以在多项式时间内解 决的判定性问题属于P类问题。P类问题就是所有复杂度为多项式 时间的问题的集合。 2 NP NP问题(Non-deterministic Polynomial ) Non-deterministic NP是一个判定问题类,这些问题可以用一个确定算法在多项式 时间内检查或验证出它们的解 ,也可以说是这些问题可以在非确定 性多项式时间内解决,它并不要求给出一个算法来求解问题本身,而 只是要求给出一个确定性算法在多项式时间内验证它的解。显然, 所有的P类问题都是属于NP问题的,但是现在的问题是,P是否等 于NP?这个问题至今还未解决 。
假如P=NP,世界将会怎样? 假如P=NP,世界将会怎样?
P是否等于NP是计算机科学领域中最突出的问题, 在千禧年七大难题中排在首位。虽然人们大多相信P问 题不等于NP问题,但人们目前既不能证明它,也不能推 翻它。科学家们普遍认为P≠NP是有原因的,让我们来看 一看,如果哪一天科学家证明了P=NP,那这个世界将会 变得怎样?
证明的难度
虽然百万美元的奖金和大量投入巨大却没有实质性结果的研究足以 显示该问题是困难的,还有一些形式化的结果证明为什么该问题可能很 难解决。 最常被引用的结果之一设计神喻。假想你有一个魔法机器可以解决 单个问题,例如决定一个给定的数字是否为质数,但可以瞬间解决这个 问题。我们的新问题是,若我们被允许任意利用这个机器,是否存在我 们可以在多项式时间内验证但无法在多项式时间内解决的问题?结果是, 依赖于机器能解决的问题,P = NP和P ≠ NP二者都可以证明。这个结论 的后果是,任何可以修改来证明该机器的存在性的结果不能解决问题。 不幸的是,几乎所有经典的方法和大部分已知的方法可以这样修改(我 们称它们在相对化)。 如果这还不算太糟的话,1993年Razborov和Rudich证明的一个结 果表明,给定一个特定的可信的假设,在某种意义下“自然”的证明不 能解决P = NP问题。这表明一些现在似乎最有希望的方法不太可能成功。 随着更多这类的定理得到证明,该定理的可能证明有越来越多的陷阱要 规避。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目前为止这个问题还“啃不动”。但是,一个 总的趋势、一个大方向是有的。人们普遍认为, P=NP不成立,也就是说,多数人相信,存在 至少一题
人们如此坚信P≠NP是有原因的,就是在研究 NP问题的过程中找出了一类非常特殊的NP问 题叫做NP-完全问题,也即所谓的 NPC问题。 C是英文单词“完全”的第一个字母。正是 NPC问题的存在,使人们相信P≠NP。
很显然,前面所说的Hamilton回路是NP问题,因为 验证一条路是否恰好经过了每一个顶点非常容易。
但我要把问题换成这样:试问一个图中是否不存在 Hamilton回路。这样问题就没法在多项式的时间里 进行验证了,因为除非你试过所有的路,否则你不 敢断定它“没有Hamilton回路”。
NP问题
之所以要定义NP问题,是因为通常只有NP问 题才可能找到多项式的算法。
为了说明NPC问题,我们先引入一个概念—— 约化(Reducibility,有的资料上叫“归约”)
约化
一个问题A可以约化为问题B的含义即是,可 以用问题B的解法解决问题A,或者说,问题 A可以“变成”问题B。
因此,我们会说,一个O(0.01*n^3)的程序的效率 比O(100*n^2)的效率低,尽管在n很小的时候,前 者优于后者,但后者时间随数据规模增长得慢,最 终O(n^3)的复杂度将远远超过O(n^2)。我们也说, O(n^100)的复杂度小于O(1.01^n)的复杂度。
先用几句话简单说明一下时间复杂度
点一次且恰好一次(不遗漏也不重复)最后又走回来的路 (满足这个条件的路径叫做Hamilton回路)。 这个问题现在还没有找到多项式级的算法。事实上,这个问 题就是我们后面要说的NPC问题。
P类问题
如果一个问题可以找到一个能在多项式的时间 里解决它的算法,那么这个问题就属于P问题。
P是英文单词多项式的第一个字母。
我们不会指望一个连多项式地验证一个解都不 行的问题存在一个解决它的多项式级的算法。
很显然,所有的P类问题都是NP问题。也就是 说,能多项式地解决一个问题,必然能多项式 地验证一个问题的解——既然正解都出来了, 验证任意给定的解也只需要比较一下就可以了。
NP问题
关键是,人们想知道,是否所有的NP问题都 是P类问题。
NP问题
在这里强调,NP问题不是非P类问题。 NP问题是指可以在多项式的时间里验证一个
解的问题。NP问题的另一个定义是,可以在 多项式的时间里猜出一个解的问题。
比方说,我RP很好,在程序中需要枚举时,我可 以一猜一个准。
现在某人拿到了一个求最短路径的问题,问从起点 到终点是否有一条小于100个单位长度的路线。它 根据数据画好了图,但怎么也算不出来,于是来问 我:你看怎么选条路走得最少?
容易看出,前面的几类复杂度被分为两种级别,其中 后者的复杂度无论如何都远远大于前者:
一种是O(1),O(log(n)),O(n^a) 等,我们把它叫做多项式级的 复杂度,因为它的规模n出现在底数的位置;
另一种是O(a^n)和O(n!)型复杂度,它是非多项式级的,其 复杂度计算机往往不能承受。
当我们在解决一个问题时,我们选择的算法通常都需 要是多项式级的复杂度,非多项式级的复杂度需要的 时间太多,往往会超时,除非是数据规模非常小。
什么是P问题、NP问题和NPC问题
先用几句话简单说明一下时间复杂度
时间复杂度并不是表示一个程序解决问题需要花多少 时间,而是当问题规模扩大后,程序需要的时间长度 增长得有多快。
也就是说,对于高速处理数据的计算机来说,处理某 一个特定数据的效率不能衡量一个程序的好坏,而应 该看当这个数据的规模变大到数百倍后,程序运行时 间是否还是一样,或者也跟着慢了数百倍,或者变慢 了数万倍。
还有一些穷举类的算法,所需时间长度成几何阶数 上涨,这就是O(a^n)的指数级复杂度,甚至O(n!)的 阶乘级复杂度。
不会存在O(2*n^2)的复杂度,因为前面的那个“2” 是系数,根本不会影响到整个程序的时间增长。
先用几句话简单说明一下时间复杂度
同样地,O (n^3+n^2)的复杂度也就是O(n^3)的复 杂度。
NP问题
我说,我RP很好,肯定能随便给你指条很短的路出来。然后 我就胡乱画了几条线,说就这条吧。那人按我指的这条把权 值加起来一看,嘿,神了,路径长度98,比100小。于是答 案出来了,存在比100小的路径。
别人会问他这题怎么做出来的,他就可以说,因为我找到了 一个比100 小的解。
在这个题中,找一个解很困难,但验证一个解很容易。验证 一个解只需要O(n)的时间复杂度,也就是说我可以花O(n)的 时间把我猜的路径的长度加出来。
不管数据有多大,程序处理花的时间始终是那么多的,我们 就说这个程序很好,具有O(1)的时间复杂度,也称常数级复 杂度;
先用几句话简单说明一下时间复杂度
数据规模变得有多大,花的时间也跟着变得有多长, 这个程序的时间复杂度就是O(n),比如找n个数中 的最大值;
而像冒泡排序、插入排序等,数据扩大2倍,时间 变慢4倍的,属于O(n^2)的复杂度。
不可解问题
自然地,人们会想到一个问题:会不会所有的问题都 可以找到复杂度为多项式级的算法呢?
答案是否定的。有些问题甚至根本不可能找到一个正 确的算法来,这称之为“不可解问 题”(Undecidable Decision Problem)。
例如:
Hamilton回路。 问题是这样的:给你一个图,问你能否找到一条经过每个顶
那么,只要我RP好,猜得准,我一定能在多项式的时间里解 决这个问题。我猜到的方案总是最优的,不满足题意的方案 也不会来骗我去选它。这就是NP问题。
NP问题
当然有不是NP问题的问题,即你猜到了解但 是没用,因为你不能在多项式的时间里去验证 它。
一个经典的例子,它指出了一个目前还没有办 法在多项式的时间里验证一个解的问题。