浅谈NP问题
np问题 通俗解释

np问题通俗解释
NP问题是指“非确定性多项式时间”问题,也称为不可解问题。
它是计算机科学中的一个重要问题类别。
通俗来说,NP问题是指那些可以在多项式时间内验证是否解
答正确的问题,但尚未找到可以在多项式时间内解决的算法。
也就是说,虽然我们可以在多项式时间内检查一个给定解是否正确,但我们目前还没有找到一种高效的方法来找到一个解。
在计算理论中,NP问题是与P问题相对的一个概念。
P问题
是指可以在多项式时间内解决的问题。
一个经典的例子是旅行商问题。
在旅行商问题中,我们需要找到一条路径,使得旅行商可以经过多个城市,每个城市只到达一次,并且回到起点,同时总路径长度最短。
虽然我们可以在多项式时间内计算出给定路径的总长度,但当前还没有找到一种可以在多项式时间内找到最短路径的方法。
目前来说,还没有找到一种通用的解决NP问题的方法。
因此,研究人员一直在努力寻找解决这些问题的有效算法,或者找到一种方法来证明这些问题不存在多项式时间解决的算法。
NP的原理及定义和解释

NP的原理及定义和解释NP是非确定性多项式(Non-deterministic Polynomial)的简称,是计算机科学中的一个复杂性类。
NP问题是指可以在多项式时间内验证解的正确性的问题。
NP问题的解可以通过非确定性多项式算法在多项式时间内验证,但没有有效的多项式算法可以在多项式时间内求解。
因此,NP问题的求解是非常困难的,往往需要使用暴力或近似算法等方法。
定义:NP问题的定义可以分为两个方面:1. 证书存在性:对于一个给定的问题,如果存在一个证书(certificate),可以在多项式时间内验证其正确性,则该问题属于NP 问题。
2.多项式时间验证:对于给定的问题和一个潜在的解,可以在多项式时间内验证这个解是否是正确的。
NP问题的解法可以由以下两种形式描述:1.非确定性算法:对于一个给定的问题,非确定性算法可以通过猜测和尝试的方式,在多项式时间内找到问题的解。
这个算法可以通过多次猜测和尝试来验证潜在的解是否是正确的,但并没有给出一个确定性的步骤来找到解。
2.多项式时间验证算法:对于一个给定的问题和一个潜在的解,可以通过一个多项式时间的验证算法,验证这个解是否是正确的。
原理:NP问题的原理基于两个关键概念:证书存在性和多项式时间验证。
证书存在性是指对于一个给定的问题,存在一个证书(或称为证明)可以在多项式时间内验证其正确性。
证书可以是一组状态、数字、字符串等,通过这个证书可以验证一个给定的解是否正确。
这个证书可以被看作是一个“快速验证器”,它能够在多项式时间内验证问题的解的正确性。
多项式时间验证是指对于给定的问题和一个潜在的解,可以在多项式时间内验证这个解是否是正确的。
多项式时间验证算法可以通过一系列的计算和判断,来验证一个给定的解是否满足问题的条件。
这个验证算法的运行时间是一个多项式,在实际应用中可以被认为是“快速”的。
基于以上两个概念,可以得到一个重要的结论:如果一个问题是NP 问题,那么可以把它的解转换成一个证书,并使用多项式时间验证算法,来验证这个证书的正确性。
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?这个问题至今还未解决。
np问题的字面解释 非确定型多项式完全问题

NP问题的字面解释非确定型多项式完全问题一、背景介绍1. NP问题的概念NP问题是计算机科学和数学领域中一个重要的概念,即“非确定性多项式时间”(Non-deterministic Polynomial time),它代表了一类能在多项式时间内被验证的问题。
这类问题的解决方案虽然不能在多项式时间内被找到,但一旦有了一个解,却能够在多项式时间内被验证。
简而言之,如果一个问题可以在多项式时间内被验证,则它是一个NP问题。
2. 多项式完全问题的概念多项式完全问题是一类特殊的NP问题,它具有以下两个性质:它是一个NP问题;任何一个NP问题都可以在多项式时间内规约到它。
也就是说,如果有一个多项式时间算法能够解决任何一个多项式完全问题,那么就能够解决所有的NP问题。
3. 非确定型多项式完全问题非确定型多项式完全问题是NP问题中最困难的一类问题,它要求在多项式时间内验证一个解的存在,并且这个验证需要非确定性算法。
换言之,虽然这类问题的解可以在多项式时间内被验证,但却无法在多项式时间内被求解。
非确定型多项式完全问题是计算理论中一个极具挑战性的问题。
二、定义和性质1. 非确定型多项式完全问题的定义非确定型多项式完全问题是指一个问题,如果它是一个NP问题,并且任何一个NP问题都可以在多项式时间内归约到它,那么它就是一个非确定型多项式完全问题。
每一个非确定型多项式完全问题都是NP 问题,但不是所有的NP问题都是非确定型多项式完全问题。
2. 非确定型多项式完全问题的性质非确定型多项式完全问题具有以下一些重要性质:(1)困难性:非确定型多项式完全问题是计算上的一类最困难问题,它们无法在多项式时间内被求解。
(2)通用性:任何一个NP问题都可以在多项式时间内归约到非确定型多项式完全问题,因此解决了一个非确定型多项式完全问题就意味着可以解决所有的NP问题。
(3)实际意义:非确定型多项式完全问题在实际生活中具有广泛的应用,例如在计划问题、调度问题、网络设计等方面都有重要的地位。
P问题、NP难问题详解

时间复杂度
时间复杂度
多项式级的复杂 度。 如 O(1),
O(log(n)),O(n^a) 等 ——因为它的 规模n出现在底 数的位置 !
非多项式级的
如:O(a^n)和 O(n!)等!
P问题
• 如果一个问题可以找到一个能在多项式的时间里解决它的 算法,那么这个问题就属于P问题。
• 我们常见到的一些信息奥赛的题目都是P问题。 ?
NPC问题(一)
• 人们普遍认为,P=NP不成立
多数人相信,存在至少一个不可能
有多项式级复杂度的算法的NP问题——这就是NPC问题。
• Reducibility(“约化”或“归约”):一个问题A可以约化为问题B的含义即 是,可以用解决问题B的解法来解决问题A,或者说,问题A可以“变成” 问题B。
• 现在再来说一下约化的标准概念就不难理解了:如果能找 到这样一个变化法则,对任意一个程序A的输入,都能按 这个法则变换成程序B的输入,使两程序的输出相同,那 么我们说,问题A可约化为问题B。
• 注:我们所说的“可约化”是指的可“多项式地”约化 (Polynomial-time Reducible),即变换输入的方法是能在多 项式的时间里完成的。约化的过程只有用多项式的时间完 成才有意义。
• 如:一元一次方程可以“归约”为一元二次方程。
• 问题A可“约化”为问题B直观意义:B的时间复杂度高于或者等于A的时 间复杂度。也就是说,问题A不比问题B难。
• 很显然,约化具有一项重要的性质:约化具有传递性。如果问题A可约化 为问题B,问题B可约化为问题C,则问题A一定可约化为问题C。
NPC问题(为True的逻辑电路吗?
NPC问题(补充)
其大概意思是说任意一个NP问题的 输入和输出都可以转换成逻辑电路 的输入和输出(想想计算机内部也 不过是一些 0和1的运算),因此对 于一个NP问题来说,问题转化为了 求出满足结果为True的一个 输 入(即一个可行解)。
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)。
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)。
谈一谈如何理解NP问题

谈⼀谈如何理解NP问题⼀概念引⼊1.1时间复杂度在计算机处理⼀个问题时,往往需要⼀定的时间,假设把这个问题复杂化(将这个问题进⾏扩展),那么把计算机处理这类问题的时间变化速率,称为解决这种问题所⽤算法的时间复杂度。
例如,⼀个枚举⼀定范围内的数字的问题,计算机所⽤时间会随着范围的变化⽽线性变化,由于是简单的枚举,所以时间复杂度可以记为O(n),n可以代表这个范围⼤⼩。
在计算机处理问题时,由于算法设计不同,对应的时间复杂度也不⼀定相同。
1.2多项式级时间和⾮多项式级时间在众多的时间复杂度中,根据其表达式的特点,可以⼤致将它们划分为两个范畴,⼀个是多项式级⼀个是⾮多项式级。
它们各⾃表⽰什么意思呢?还记得⾼中数学中学习的函数吗,在学习不同函数时,最常做的⼀件事是观察它们的图像变化,可以发现,x作为底数的图像和x作为指数的图像在后期的变化简直有天壤之别。
这也正是需要将时间复杂度划分的原因(多项式级的时间复杂度在后期变化远⼩于⾮多项式级),将n作为底数的时间复杂度归为多项式级,n作为指数的归为⾮多项式级。
例如O(n)、O(log(n))、O(n^a)等就是多项式级的时间复杂度,像O(n!)和O(a^n)就是⾮多项式级的复杂度。
对于计算机来说需要处理的问题往往是很庞⼤的,如果采⽤⾮多项式级复杂度的算法,那么将浪费很⼤的资源。
1.3 P问题在解释了多项式级和⾮多项式级时间复杂度之后,P问题的概念就简单了。
对于众多的问题,通常把能够使⽤多项式级时间复杂度算法解决的问题称为P问题。
⼆什么叫NP问题2.1 约化⼀般,问题A可以约化为问题的B的解释是可以⽤解决问题B的⽅法解决问题A。
简单的说,也就是问题A是问题B的另⼀种形式,且问题A的复杂程度要⼩于等于问题B。
就像解⽅程组的问题,假如你会解⼆元⼀次⽅程组,那么你⼀定会解⼀元⼀次⽅程,在这个例⼦中,⼀元⼀次⽅程就是问题A,⼆元⼀次⽅程组就是问题B,问题A可以看作是问题B中另⼀个⾃变量系数为零的特殊“⼆元⼀次⽅程组”。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
姓名:肖晓翔
班级:09软工
学号:2009221104220023
浅谈NP类问题
在算法界一直有一这样个难题,P到底等不等于NP,它是计算机科学领域的最大难题,关系到计算机完成一项任务的速度到底有多快。
那么什么是P类问题,什么是NP类问题呢?
P是一个判定问题的类,这些问题可以用一个确定性算法在多项式时间内判定或解出。
如果一个判定性问题的复杂度是该问题的一个实例的规模n的多项式函数,则我们称这种可以在多项式时间内解决的判定性问题属于P类问题。
P类问题就是所有复杂度为多项式时间的问题的集合。
NP也是一个判定问题的类,这些问题可以用一个确定算法在多项式时间内检查或验证出它们的解,也可以说是这些问题可以在非确定性多项式时间内解决,它并不要求给出一个算法来求解问题本身,而只是要求给出一个确定性算法在多项式时间内验证它的解。
NP类问题就是至今没有找到多项式时间算法解的一类问题。
显然,所有P类问题都是属于NP类问题的,但现在的问题是P是否等于NP?我认为P是等于NP的,因为多数科学家相信P≠NP,没人能发现一个NP完全问题的多项式时间算法。
但是算法的空间是很大的,我们做的只是在开始搜索的起点,过分依赖某种投机的猜测不是规划研究的一个好的导引,我们必须总是尝试每个问题的两个方向。
虽然我们现在没发现,就不能证明它不存在,就像我们在没找到证据前,以自身的感受错误地认为地球是宇宙的中心一样。
【1】
在生活中常见的的NP问题:1.旅行商问题:给定n个城市,各个城市之间的距离一定,判断能否找到一条线路,使每个城市都经过一次且仅一次,最后返回出发城市,所走路程最少。
2.m团问题CLIQUE:给定无向图G=(V,E),正整数m,判定V中是否存在m个顶点,使得它们到处的子图构成一个完全图。
等等这些都是NP类问题,可见跟我们生活息息相关。
【2】
目前求解NP难度问题常见方法:
(1)特殊情形:仔细分析所遇到的NP完全问题,研究具体实例的特殊性,考虑是否必须在最一般的意义下来解决此问题。
也许可以利用具体实例的特殊性,在特殊条件下解决此问题。
(2)动态规划和分支限界方法:对于许多NP完全问题来说,用动态规划和分支限界方法常可得到较高的解题效率。
(3)概率分析:对于许多NP完全问题,其困难实例出现的概率很小,因此对这类NP完全问题常可设计出平均性能很好的算法。
(4)近似算法:通常可以设计出解NP完全问题多项式时间近似算法,以近似解来代替最优解。
(5)启发式算法:在用别的方法都不能奏效时,也可以采用启发式算法来解NP完全问题,根据具体问题的启发式搜索策略来求问题的解。
【3】
NP难度问题未来发展方向:
NP完全问题将来一定会得到解决即P=NP了,这将瞬间给各个科学领域都带来革命性的进展。
整数规划,01规划,背包问题全部获解,运筹学将登上一个全新的高度;同时,空中接龙,扫雷,数独等经典游戏也由于获得了多项式的算法而在很大程度上失去了意义。
一些新型的自动编程语言将出现,并将逐渐取代传统的编程语言。
这种新型编程语言扮演着一个“判定性/最优化问题万能解决器”的角色。
困扰人类已久的自然语言处理问题将一举攻破。
类似地,所有人工智能问题都将得到解决。
我们只需要向计算机提交足够多的情景以及
与之对应的正常人反应,计算机就可以找出一种能正确生成出这些反应的最简算法,完全模仿人类的行为。
数学证明可以完全交给计算机来处理。
寻找一个反例和验证一个反例同样简单,一切错误的猜想都将瞬间被推翻。
事实上,寻找一个数学证明和验证一个证明的正确性也变得同样简单,因此一切正确的命题也能瞬间找到一个最简的证明。
发明任何新的密码算法都是徒劳的。
计算机可以根据一大批明文密文样本推算出生成密文的算法(只要这个算法是多项式的)。
现有的密码学体系彻底崩溃。
【4】
参考文献:
【1】百度文库:/view/f7300fd6c1c708a1284a4452.html,011-01-01 【2】百度文库:/view/28548dfdc8d376eeaeaa3164.html,2010-8-14
【3】吕国英。
算法设计与分析(第二版)。
北京:清华大学出版社,2009
【4】百度文库:/view/f7300fd6c1c708a1284a4452.html,011-01-01。