NPProblemByDingZhuDu
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问题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难问题求解综述
NP难问题求解综述摘要:定义NP问题及P类问题,并介绍一些常见的NP问题,以及NP问题的一些求解方法,最后最NP问题求解的发展方向做一些展望。
关键词:NP难问题P类问题算法最优化问题正文:一,NP难问题及P类问题为了解释NP难问题及P类问题,先介绍确定性算法和非确定性算法这两个概念,设A 是求解问题Π的一个算法,如果在算法的整个执行过程中,每一步只有一个确定的选择,则称算法A是确定性(Determinism)算法。
设A是求解问题Π的一个算法,如果算法A以如下猜测并验证的方式工作,就称算法A是非确定性(Nondeterminism)算法:(1)猜测阶段:在这个阶段,对问题的输入实例产生一个任意字符串y,在算法的每一次运行时,串y的值可能不同,因此,猜测以一种非确定的形式工作。
(2)验证阶段:在这个阶段,用一个确定性算法验证:①检查在猜测阶段产生的串y是否是合适的形式,如果不是,则算法停下来并得到no;②如果串y是合适的形式,则验证它是否是问题的解,如果是,则算法停下来并得到yes,否则算法停下来并得到no。
什么是NP难问题,如果对于某个判定问题Π,存在一个非负整数k,对于输入规模为n的实例,能够以O(n k)的时间运行一个非确定性算法,得到yes或no的答案,则该判定问题Π是一个NP 类(Nondeterministic Polynomial)问题。
令Π是一个判定问题,如果对于NP类问题中的每一个问题Π',都有Π'∝pΠ,则称判定问题Π是一个NP难问题。
什么是P类问题,如果对于某个判定问题Π,存在一个非负整数k,对于输入规模为n 的实例,能够以O(n k)的时间运行一个确定性算法,得到yes或no的答案,则该判定问题Π是一个P 类(Polynomial)问题。
所有易解问题都是P类问题。
P类问题和NP类问题的主要差别:P类问题可以用多项式时间的确定性算法来进行判定或求解;NP类问题可以用多项式时间的非确定性算法来进行判定或求解。
NP完全问题(纯理论)
NP类问题举例—求真因子问题
国王: 顺序算法 宰相: 并行算法
是否所有的难解问题通过并行计算使其在多项式内可 解?
关于并行算法:当将一个问题分解到多个处理器上解 决时,由于算法中不可避免地存在必须串行执行的操 作,从而大大地限制了并行计算机系统的加速能力。
NP类问题举例—求真因子问题
阿达尔定律:串行执行操作仅占全部操作1%,解 题速度最多也只能提高一百倍。
以多项式作为分界函数?
原因有两个: 一、常见算法大致分为两类: 一类是多项式时间内可实现的 另一类需要指数时间(O(cn))
多项式时间算法的可实现性远大于指数时间算法。 (参见P8,表1.2)
以多项式作为分界函数?
二、多项式时间算法与计算模型无关 算法的研究依赖于计算模型。在不同类型计算模型 上实现算法,计算时间不同。
SATISFIABILITY∝p3-SATISFIABILITY
几个典型的NPC问题
图的着色问题(COLORING) 判定问题:COLORING 输入:无向图G=(V,E) 问题:是否可用k种颜色为图G的顶点着色,使 得相邻顶点不会有相同颜色。
3-SATISFIABILITY∝pCOLORING
定义12.3 令П 是一个判定问题,如果: (1) П ∈NP; (2) 对NP中的所有问题П ′∈NP,都有 П ′∝pП ; 则称判定问题П 是NP完全 (NPC)的。
P类、NP类、NPC类问题关系
根据定义,可用如下图表示三者之间的关系:
NP
P
NPC
P类、NP类、NPC类问题关系
对NPC问题,有个重要性质 对NPC类中的一个问题,如果能够证明用多项式 时间的确定性算法来进行求解或判定,那么, NP中的所有问题都可以通过多项式时间的确定性 算法来进行求解或判定。
谈一谈如何理解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中另⼀个⾃变量系数为零的特殊“⼆元⼀次⽅程组”。
np难问题的证明方法
np难问题的证明方法
NP难问题是指那些无法在多项式时间内验证其解是否正确的问题,也称为NP问题。
要证明一个问题是NP难问题,需要证明该问题具有NP问题的性质,即无法在多项式时间内验证其解是否正确。
证明一个问题是NP难问题的一般步骤如下:
1. 确定问题的定义和性质:首先需要明确问题的定义和性质,包括问题的输入和输出、问题的约束条件和问题的解的验证方式等。
2. 证明问题无法在多项式时间内求解:需要证明该问题无法在多项式时间内求解,即不存在一种算法可以在多项式时间内求解该问题。
这可以通过证明该问题的计算复杂性为指数级或更高来实现。
3. 证明问题具有NP问题的性质:需要证明该问题具有NP问题的性质,即无法在多项式时间内验证其解是否正确。
这可以通过证明该问题的验证复杂性也为指数级或更高来实现。
4. 证明其他NP问题可以规约到该问题:需要证明其他NP问题可以规约到该问题,即可以将其他NP问题的解转化为该问题的解。
这可以通过证明其他NP问题可以在多项式时间内规约到该问题来实现。
需要注意的是,NP难问题的证明方法通常是基于数学和计算机科学的理论,需要具备一定的专业知识和技能。
同时,NP难问题的证明也需要考虑各种
复杂性和计算复杂性的限制条件,因此在实际操作中可能会有很大的难度。
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)。
取其最⾼次,可以看出,这是⼀个时间复杂度为多项式的表⽰⽅式。
第1章NP完全问题
设∏、∏'和∏"是三个判定问题,有∏∝poly∏'和∏'∝poly∏",那 么∏∝poly∏"。
推论10.1(Page 179)
如果∏和∏'是NP中的二个问题,若有∏'∝poly∏,并且∏'是完
全的,则∏是完全的。
13
如果一个NP问题的所有可能答案,都可以在多项式时间内进行
使用非确定性算法,先猜测一个城市序列,然后验证这个序列
是一个游程。如果是,只要判断游程的长度是否超过界k即可。
㈡证明:哈密顿回路问题在多项式时间内归约到旅行商问题
设G是哈密顿回路的任意实例。我们构建一个含权图G'和一个界
k,使得当且仅当G'有一个总长不超过k的游程时,G有一条哈密
顿回路。
设G=(V,E),G'=(V,E')是结点V集合上的完全图,即
本章将研究难解问题的一个子类,通常称为NP完全问 题(NPC问题)。这一类问题目前约有3000多个,其中还 包括数百个著名问题。它们有一个共同特性,如果它们 中的一个是多项式可解的话,那么所有其它问题也是多 项式可解的。现存的求解这些问题算法的运行时间,对 于中等大小的输入也要用几百或几千年的时间。
如果给出一个回路,我们很容易判断它是否是哈密顿 回路。只要检查所有的结点是否都在这个回路中,并且 只出现一次。检查仅需O(n2)时间。
我们一般认为NPC问题是难解问题。因为到目前为止, 它们还不存在一个多项式时间的算法,甚至将来也很难 找到,即P≠NP。实际上,对于某些结点数不到100的无 向图,使用现有速度最快的计算机也需要比较荒唐的时 间,例如耗费几百年才能够确定它是否存在一条哈密顿 回路。
NP完备性——精选推荐
NP完备性1.NP完全在计算复杂度理论的世界中,NPC问题是NP(⾮决定性多项式时间)中最难的决定性问题。
因此NP完备问题应该是最不可能被化简为P(多项式时间可决定)的决定性问题的集合。
许多⼈推测P与NPC没有交集。
理由是因若任何NPC问题得到多项式时间的解法,那此解法就可应⽤在所有NP问题上。
更详细的定义容下叙述。
⼀个NPC问题的例⼦是⼦集合加总问题,题⽬为给予⼀个有限数量的整数集合,找出任何⼀个此集合的⾮空⼦集且此⼦集内整数和为零。
意即:I是⼀个包括若⼲整数的集合,找出任⼀I′∈I且∑ I′ = 0这个问题的答案⾮常容易验证,但没有任何⼀个够快的⽅法可以在合理的时间内(意即多项式时间)找到答案。
只能⼀个个将它的⼦集取出来⼀⼀测试,它的时间复杂度是Ο(2n),n是此集合的元素数量。
NPC的正式定义假设P≠ NP的复杂度类的图解。
若P = NP则三类别相同。
⼀个决定性问题C若是为NPC,则代表它对NP是完备的,这表⽰:它是⼀个NP问题,且它是⼀个NP-困难问题,意即其他属于NP的问题可变换(reducible)成它。
可变换在此意指对每个问题L,总有⼀个多项式时间多对⼀变换,即⼀个决定性的算法可以将实例l∈ L 转化成实例c∈ C,并让c回答Yes当且仅当此答案对l也是Yes。
为了证明某个NP问题A实际上是NPC问题,证明者必须找出⼀个已知的NPC问题可以变换成A。
本定义的得到⼀个结论,就是若上述的C有⼀个多项式时间可解的算法,则我们可以将所有的NP问题降到P之中。
这个定义是史提芬?古克[1]所提出。
虽然NPC这个词并没有出现在这篇论⽂上任何地⽅。
在这个资讯科学会议上,资讯科学家激动地讨论NPC问题是否可以在⼀个确定型图灵机上以多项式时间求解。
John Hopcroft总结与会众⼈的共识,认为由于没有⼈能对某⼀命题提出驳倒对⽅的证明,此问题不会于现在解决。
此命题就是知名的P和NP相等吗?。
尚未有⼈能提出证明,说明NPC问题是否能在多项式时间中解决,使得此问题成为著名的数学中未解决的问题。
P问题、NP问题、NPC问题和NP难问题的概念
容易看出,前面的几类复杂度被分为两种级别,其中后者的复杂度无论如何都远远大于前者:一种是O(1),O(log(n)),O(n^a)等,我们把它叫做多项式级的复杂度,因为它的规模n出现在底数的位置;另一种是O(a^n)和O(n!)型复杂度,它是非多项式级的,其复杂度计算机往往不能承受。当我们在解决一个问题时,我们选择的算法通常都需要是多项式级的复杂度,非多项式级的复杂度需要的时间太多,往往会超时,除非是数据规模非常小。
很显然,约化具有一项重要的性质:约化具有传递性。如果问题A可约化为问题B,问题B可约化为问题C,则问题A一定可约化为问题C。这个道理非常简单,就不必阐述了。
现在再来说一下约化的标准概念就不难理解了:如果能找到这样一个变化法则,对任意一个程序A的输入,都能按这个法则变换成程序B的输入,使两程序的输出相同,那么我们说,问题A可约化为问题B。
np难问题
NP难问题求解综述彭茗菁2008221104210521[摘要]:上世纪70年代开始,诞生了一种许多数学家及电子计算器学家所关心的大问题—NP难问题, “P=NP?”这个问题,作为理论计算机科学的核心问题,其声名早已经超越了这个领域。
它是Clay研究所的七个百万美元大奖问题之一,在2006国际数学家大会上,它是某个1小时讲座的主题。
[关键词]: NP难问题,NP完全问题,计算复杂性,多项式函数NP难问题,不确定性图灵机在P时间内能解决的问题,是世界七大数学难题之一。
NP 问题排在百万美元大奖的首位,足见他的显赫地位和无穷魅力。
NP的英文全称是Non-deterministic Polynomial的问题,即多项式复杂程度的非确定性问题。
简单的写法是NP=P?,问题就在这个问号上,到底是NP等于P,还是NP不等于P。
一、NP难问题和P类问题的介绍NP问题属于“计算复杂性”研究的课题。
计算复杂性通俗来说就是用计算机求解问题的难易程度。
其度量标准:一是计算所需的步数或指令条数(即时间复杂度),二是计算所需的存储单元数量(即空间复杂度)。
它不是对一个具体问题去研究它的计算复杂性,而是依据难度去研究各种计算问题之间的联系,按复杂性把问题分成不同的类,即复杂性类。
如果一个判定性问题的复杂度是该问题的一个实例的规模n的多项式函数,则这种可以在多项式时间内解决的判定性问题属于P类问题。
P类问题就是所有复杂度为多项式时间的问题的集合。
通俗的称所有复杂度为多项式时间的问题为易解的问题类否则为难解的问题。
然而有些问题很难找到多项式时间的算法(或许根本不存在),但是如果给了该问题的一个答案,可以在多项式时间内判断这个答案是否正确,这种可以在多项式时间内验证一个解是否正确的问题称为NP问题,亦称为易验证问题类。
1971年古克(Stephen A. Cook) 发表了《The Complexity of Theorem Proving Procedures》才把P 之外约问题归成了三大类,即NP, NP-complete 及NP-hard。
NP问题
下面引入P类问题的概念:如果一个问题可以找到一个能在多项式的时间里解决它的算法,那么这个问题就属于P问题。
P是英文单词多项式的第一个字母。
哪些问题是P类问题呢?通常NOI和NOIP不会出不属于P类问题的题目。
我们常见到的一些信息奥赛的题目都是P 问题。
道理很简单,一个用穷举换来的非多项式级时间的超时程序不会涵盖任何有价值的算法。
接下来引入NP问题的概念。
这个就有点难理解了,或者说容易理解错误。
在这里强调(回到我竭力想澄清的误区上),NP问题不是非P类问题。
NP问题是指可以在多项式的时间里验证一个解的问题。
NP问题的另一个定义是,可以在多项式的时间里猜出一个解的问题。
比方说,我RP很好,在程序中需要枚举时,我可以一猜一个准。
现在某人拿到了一个求最短路径的问题,问从起点到终点是否有一条小于100个单位长度的路线。
它根据数据画好了图,但怎么也算不出来,于是来问我:你看怎么选条路走得最少?我说,我RP很好,肯定能随便给你指条很短的路出来。
然后我就胡乱画了几条线,说就这条吧。
那人按我指的这条把权值加起来一看,嘿,神了,路径长度98,比100小。
于是答案出来了,存在比100小的路径。
别人会问他这题怎么做出来的,他就可以说,因为我找到了一个比100 小的解。
在这个题中,找一个解很困难,但验证一个解很容易。
验证一个解只需要O(n)的时间复杂度,也就是说我可以花O(n)的时间把我猜的路径的长度加出来。
那么,只要我RP好,猜得准,我一定能在多项式的时间里解决这个问题。
我猜到的方案总是最优的,不满足题意的方案也不会来骗我去选它。
这就是NP问题。
当然有不是NP问题的问题,即你猜到了解但是没用,因为你不能在多项式的时间里去验证它。
下面我要举的例子是一个经典的例子,它指出了一个目前还没有办法在多项式的时间里验证一个解的问题。
很显然,前面所说的Hamilton回路是NP问题,因为验证一条路是否恰好经过了每一个顶点非常容易。
但我要把问题换成这样:试问一个图中是否不存在Hamilton回路。
什么是NP问题
什么是P问题、NP问题和NPC问题●先用几句话简单说明一下时间复杂度1.时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。
2.也就是说,对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的规模变大到数百倍后,程序运行时间是否还是一样,或者也跟着慢了数百倍,或者变慢了数万倍。
3.不管数据有多大,程序处理花的时间始终是那么多的,我们就说这个程序很好,具有O(1)的时间复杂度,也称常数级复杂度;4.数据规模变得有多大,花的时间也跟着变得有多长,这个程序的时间复杂度就是O(n),比如找n个数中的最大值;5.而像冒泡排序、插入排序等,数据扩大2倍,时间变慢4倍的,属于O(n^2)的复杂度。
6.还有一些穷举类的算法,所需时间长度成几何阶数上涨,这就是O(a^n)的指数级复杂度,甚至O(n!)的阶乘级复杂度。
7.不会存在O(2*n^2)的复杂度,因为前面的那个“2”是系数,根本不会影响到整个程序的时间增长。
8.同样地,O (n^3+n^2)的复杂度也就是O(n^3)的复杂度。
9.因此,我们会说,一个O(0.01*n^3)的程序的效率比O(100*n^2)的效率低,尽管在n很小的时候,前者优于后者,但后者时间随数据规模增长得慢,最终O(n^3)的复杂度将远远超过O(n^2)。
我们也说,O(n^100)的复杂度小于O(1.01^n)的复杂度。
10.容易看出,前面的几类复杂度被分为两种级别,其中后者的复杂度无论如何都远远大于前者:1)一种是O(1),O(log(n)),O(n^a) 等,我们把它叫做多项式级的复杂度,因为它的规模n出现在底数的位置;2)另一种是O(a^n)和O(n!)型复杂度,它是非多项式级的,其复杂度计算机往往不能承受。
11.当我们在解决一个问题时,我们选择的算法通常都需要是多项式级的复杂度,非多项式级的复杂度需要的时间太多,往往会超时,除非是数据规模非常小。
NP问题
什么是NP问题?概念:在计算机学科中,存在多项式时间的算法的一类问题,称之为P类问题;而像梵塔问题、推销员旅行问题、(命题表达式)可满足问题这类,至今没有找到多项式时间算法解的一类问题,称之为NP类问题。
拿推销员旅行问题为例,假设推销员亨利有向6个城市推销公司产品的任务,并规定了一个旅行预算。
他手中有一张航班票价表,他要从A城开始走遍图中的6个城市后返回A城,并且不超出预算,请你帮他找出应走的路线。
如果给出的预算宽裕,则任务很简单;如果预算比较紧张,你就得认真设计路线了。
你得考虑每一种可能的次序,以使旅费最少。
如果有3个城市A,B和C,互相之间都有往返的飞机,而且起始城市是任意的,则有6种访问每个城市的次序:ABC,ACB,,BAC,BCA,CAB,CBA。
如果有4个城市,则有24种次序,可以用阶乘来表示:4!=4×3!=4×3×2×1=24;若有5个城市,则有5!=5×4!=120,类似的有6!=720等等。
即使用计算机来计算,这种急剧增长的可能性的数目也远远超过计算资源的处理能力,对此,算法复杂性专家史蒂芬.库克(Stephen Cook)评论:"如果有100个城市,需要求出100!条路线的费用,没有哪一台计算机能够胜任这一任务。
打个比方,让太阳系中所有的电子以它旋转的频率来计算,就算太阳烧尽了也算不完。
问题的关键是某些东西在实践中行不通。
"而NP问题中最困难的问题称之为NP完全问题,已经证明的包括:电话网络的最优几何设计、格子棋的最佳走法。
根据库克定理,任意一个NP完全问题如果能够在多项式时间内解决,则所有的NP问题都能在多项式时间内解决,而至今这一问题仍无答案。
争议:NP并不是NON-POLYNOMIAL,把NP说成是NON-POLYNOMIAL,是望文生义,读书不求甚解。
事实上,如果你能够证明某个NP问题是个NON-POLYNOMIAL的问题,你就可以去领那七个百万美元数学大奖中间的一个了。
NP完全问题
2.1.5 判定问题规约的定义
定义:令和是两个判定问题,如果存在一个 具有如下性能的算法A,可以用多项式的时间,把 问题的实例I转换为问题的实例I,使得I与I的 答案一致,就称以多项式时间规约于,记为 p
举例:问题是:给定一个长度为n整数数组D 和一个整数k判断是否存在D中的一个元素和k相等。 问题是:给定一个长度为m整数数组E和一个整 数k判断是否存在E中的两个元素,其和与k相等。 用于的实例I向的实例I转换的多项式算法A
判定问题举例:给定一个带整数权的有向图G和一 个正整数k,是否存在着一条长度小于k的哈密尔顿回 路?
优化问题举例:给定一个带整数权的有向图G,其 最短路径长度的哈密尔顿长度是多少?
1.3 优化问题向判定问题的转换
判定问题举例:给定一个带整数权的有向图G和一个正整数k, 是否存在着一条长度小于k的哈密尔顿回路? 优化问题举例:给定一个带整数权的有向图G,其最短路径 长度的哈密尔顿长度是多少?
第12章 NP完全问题
1. NP完全问题概述 2. P类和NP类问题 3. NP完全问题 4. co_NP类和NPI类问题
1. NP完全问题概述
1.1 Church-Turing论题和Cook-Karp论题 1.2 问题分类 1.3 优化问题向判定问题的转换
1.1 Church-Turing论题和CookKarp论题
性质:NP难题包含NP完全问题。但有些NP难题 不是NP完全问题,因为它可能不在NP问题中
3.2 多项式规约关系的传递性定 理
定理:多项式规约关系满足传递性:令、、 是三个判定问题,满足 p , p , 则有 p
证明:通过规约关系的定义,必定存在着多项 式算法A和A, A使得的实例I(规模是n) 以多项式时间转换为的实例I,A使得的实 例I以多项式时间转换为的实例I。而A和A的 多项式级别性质使得实例I的规模是n的多项式级 别的。综合起来,的任意实例都能在多项式 级别转换为的实例
求解NP问题的几种有效的快速算法
局部搜索算法
局部搜索算法(local search algorithm)是 一类近似算法的通称,它从一个初始解开始,每 一步在当前领域内找到一个更好的解,使目标函 数逐步优化,直到不能进一步改进为止。 局部搜索算法通常得到的是局部最优解。为 了得到全局最优解,需要从多个初始解进行搜索。 局部搜索算法灵活、简便。 实验表明,局部搜索算法对很多著名的NP难 问题,取得了很大的成功。它也是很早被提出来 处理NP难度问题的技术之一。
局部搜索和全局搜索的区别
局部搜索和全局搜索都采用局部邻域搜索方法求解 极小化问题,一个重要区别仅仅在于其目标函数减小的方 式。 在局部搜索中,只要目标函数值减小,新的解点就被 接受,即类似于贪婪算法;而在全局搜索中只接受能导致 达到全局最优值的解点。 在全局搜索的每一迭代步中都要利用已知的全局信息 寻找这一步中目标函数的最优值,即沿这一迭代步中最优 的解点指出的方向下降。从这一意义上说,局部搜索是无 方向的定性的全局搜索,而全局搜索是有方向的定量的局 部搜索。大多数全局搜索都要做连续量的定量计算。
f (I ,δ ) ≤ 则称
f ( I ,θ )
θ ∈ S ( I ) 为最优解
NP难度问题
定义1 令L1和L2是两个问题,如果有一确 定的多项式时间算法求解L1,而这个算法使用 了一个在多项式时间内求解L2的确定算法,则 称L1约化为L2。 定义2 若一个问题可以由可满足性问题约 化得到,则该问题是NP难度问题。 许多组合优化问题都是NP难度问题。
可满足性(SAT)问题
可满足性问题是解决数理逻辑、推理、 机器学习、约束满足等许多理论与实际问题 的基础性问题。SAT问题是一大类NP完全问 题的核心。求解SAT问题在研究人工智能和 计算理论与系统中起很重要的作用,因此, 设计求解SAT问题的有效算法一直受到人们 相当的重视。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Integer Programming
max cT x s.t. Ax b
x0 xi is an integer.
Decision version of Integer Programming
Deterministic Turing Machine (DTM)
tape head
Finite Control
a l p h a Be
The tape has the left end but infinite to the right. It is divided into cells. Each cell contains a symbol in an alphabet Γ. There exists a special symbol B which represents the empty cell.
What is NP-complete? What is NP-hard? First, what is NP?
Answer 1
Nm P e"ann opstolyn-toim m co eia mlp"u . ta
Wrong! Did you take computer science before ?
a
• The head scans at a cell on the tape and can read, erase, and write a symbol on the cell. In each move, the head can move to the right cell or to the left cell (or stay in the same cell).
How to prove a decision problem belonging to NP?
How to design a polynomial-time nondeterministic algorithm?
To answer,
we need to study computation model-Turing Machine.
Can wesolvetravelingsalesmanproblem,Hamiltonian cycle problem,andvertex-coveringproblemefficientyl?
Answer
W de o tkn nb 'o n uw e o tf,fs ic oilh e ub a n te s if to o es n u n fo n ar d becta h au N e re - s y cP e om oN rp -h P la er te d.
• The finite control has finitely many states which form a set Q. For each move, the state is changed according to the evaluation of a transition function
Part VI
NP-Hardness
Lecture 23
What’s NP?
Hard Problems
Wehave learnedseveraltechniques(greedystrategy, dynamicprogrammign, networkflow,linearprogrammign) tofindefficientsolutionsformanyproblemss, uchas shortestpath,minimumspanningtree,maximummatchinge, tc. Now,wehavea question:
Given c, A,b and c0 , is there an integer vector x satisfy
cT x c0 and Ax b
x 0.
Given x, it is easy toverify whether x satisfy thoseinequalities in polynomial time withrespect to| x | . However,this is not a legal proof for decision version of integer programming belonging to NP.
a
b
q
p
ห้องสมุดไป่ตู้
• δ(q, a) = (p, b, R) means that if the head reads symbol a and the finite control is in the state q, then the next state should be p, the symbol a should be changed to b, and the head moves one cell to the right.
Answer 2
Myprofesssaoird: NPisaclasosfdecisipornoblem thsat trhseoi lutioanrse po lynom-tiaml ec hec kable, i.e.,giveanpossibsolelutiowne,canchecinkpolynomial -timewhethiteisr .
δ : Q x Γ → Q x Γ x {R, L}.
a
b
q
p
• δ(q, a) = (p, b, L) means that if the head reads symbol a and the finite control is in the state q, then the next state should be p, the symbol a should be changed to b, and the head moves one cell to the left.