深入浅出的讲解P与NP问题
- 格式:pdf
- 大小:129.12 KB
- 文档页数:5
np问题通俗解释
NP问题是指“非确定性多项式时间”问题,也称为不可解问题。
它是计算机科学中的一个重要问题类别。
通俗来说,NP问题是指那些可以在多项式时间内验证是否解
答正确的问题,但尚未找到可以在多项式时间内解决的算法。
也就是说,虽然我们可以在多项式时间内检查一个给定解是否正确,但我们目前还没有找到一种高效的方法来找到一个解。
在计算理论中,NP问题是与P问题相对的一个概念。
P问题
是指可以在多项式时间内解决的问题。
一个经典的例子是旅行商问题。
在旅行商问题中,我们需要找到一条路径,使得旅行商可以经过多个城市,每个城市只到达一次,并且回到起点,同时总路径长度最短。
虽然我们可以在多项式时间内计算出给定路径的总长度,但当前还没有找到一种可以在多项式时间内找到最短路径的方法。
目前来说,还没有找到一种通用的解决NP问题的方法。
因此,研究人员一直在努力寻找解决这些问题的有效算法,或者找到一种方法来证明这些问题不存在多项式时间解决的算法。
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问题之我见孤维摘要:不一的两者之间能否相等,取决于它们被强调相等内容之间的一致性程度。
关键词:无关,相关,相异,同一,相等。
一.关于可解与可计算人们在实践中遇到的问题,总是伴随着他们对客体世界认识的深入而增多。
为了解决这些问题,免不了要处理许多数据。
当这些数据的量大到所谓天文数字时,对人们自己使用的工具——计算机的运算速度便提出了苛刻的要求——要多快,运算速度就有多快。
然而对于自身是有限的一台计算机来说,它不可能无限的快。
因为我们永远没有..。
..无限..能力在有限..内.,容下或将有限...。
..本身..无限化由此及彼,计算机运算的速度再快,处理数据的单位时间能力始终存在一个极限。
所以必须得到充裕时间的支持。
如:求一个推销员行走20 座城市的最短路径问题的解,即便每秒排100 万次,计算机也需要三千余年的时间才能完成。
[1]这实际上已没有什么现实意义。
而且它还远未涉及这台计算机能否连续运行三千余年这个不可回避的实际问题。
这便是人们所说的呈指数性上升的时间算法是计算机面临的最大难题。
很显然,这个问题不是计算机本身能解决的。
只能责无旁贷的由它的创造者——人来承担。
显而易见,一般来说问题的“可解性”涉及如下两个方面:一,问题本身是否存在解。
二,是否有相应可解的算法。
如果以上两个都不存在问题,则求解的过程,即对算法的执行——也就是计算便至关紧要。
就目前计算机所遇到的困难而言:在某种程度上仍取决于......需解问题的规模..决定的计算量与计算机运算速度..。
....之间的比值..关系也就是:运算速度....一定,计算量越.多.,所需时间越.长.。
计算量..,所需时间也越短..。
...一定,运算速度越快虽然从原则上来说:问题的规模...的。
.....凡是可.穷.的都是可.解.的,亦是可计算但实际上我们无法对“可穷”进行量的界定。
如推销员行走的最短路径问题。
即使城市的数量k为可穷尽的20座都需计算3000余年,才能求出解。
离散数学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完全问题的算法,因此被认为无法在多项式时间内求解。
时间复杂度:时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。
不管数据有多大,程序处理花的时间始终是那么多的,我们就说这个程序很好,具有O(1)的时间复杂度,也称常数级复杂度;数据规模变得有多大,花的时间也跟着变得有多长,则这个程序的时间复杂度就是O(n)。
多项式级的复杂度:如O(1),O(log(n)),O(n^a)等——注意它的规模n出现在底数的位置!非多项式级的复杂度:如:O(a^n)和O(n!)等。
P/NP问题:P问题即为所有可以由一个确定型图灵机在多项式表达的时间内解决的问题;NP问题由所有可以在多项式时间内验证解是否正确的决定问题组成,或者等效的说,那些解可以在非确定型图灵机上在多项式时间内找出的问题的集合。
简单地说,P问题是指可以在多项式复杂度的时间内解决的问题,NP是可以在多项式复杂度的时间内验证解是否是正确的问题。
P属于NP。
NP=Non-deterministic Polynomial。
Example:当你计算两个数字的和时,这类问题很快就经过一系列有限的基本步骤而解出来了,这就是一个P问题;另一类问题计算过程比较繁琐,但验证答案却很容易,比如把整数44427进行因数分解,求解过程可能会很费时,但如果告诉你答案是177×251,简单计算即可验证答案是对的,这类问题(分解因子)就被归为NP问题。
NP问题有很多,例如著名的推销员旅行问题(Travel Saleman Problem or TSP):假设一个推销员需要从香港出发,经过广州,北京,上海,…,等n 个城市,最后返回香港。
任意两个城市之间都有飞机直达,但票价不等。
现在假设公司只给报销C 元钱,问是否存在一个行程安排,使得他能遍历所有城市,而且总的路费小于C?推销员旅行问题显然是NP 的。
因为如果你任意给出一个行程安排,可以很容易算出旅行总开销。
但是,要想知道一条总路费小于C 的行程是否存在,在最坏情况下,必须检查所有可能的旅行安排!但n很大时,这将是个天文数字。
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)。
取其最⾼次,可以看出,这是⼀个时间复杂度为多项式的表⽰⽅式。