算法设计与分析(王佳)08np完全性理论

上传人:cl****1 文档编号:578467286 上传时间:2024-08-24 格式:PPT 页数:41 大小:1,008KB
返回 下载 相关 举报
算法设计与分析(王佳)08np完全性理论_第1页
第1页 / 共41页
算法设计与分析(王佳)08np完全性理论_第2页
第2页 / 共41页
算法设计与分析(王佳)08np完全性理论_第3页
第3页 / 共41页
算法设计与分析(王佳)08np完全性理论_第4页
第4页 / 共41页
算法设计与分析(王佳)08np完全性理论_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《算法设计与分析(王佳)08np完全性理论》由会员分享,可在线阅读,更多相关《算法设计与分析(王佳)08np完全性理论(41页珍藏版)》请在金锄头文库上搜索。

1、第十章NP完全性理论10.1计算模型计算模型n10.1.1 随机存取机随机存取机RAMRAMn10.1.2 随机存取存储程序机随机存取存储程序机RASPRASPn10.1.3 RAMRAM模型的变形与简化模型的变形与简化n10.1.4 图灵机图灵机n10.1.5 图灵机模型与图灵机模型与RAMRAM模型的关系模型的关系n10.1.6 问题变换与计算复杂性归约问题变换与计算复杂性归约10.1.1 随机存取机随机存取机RAMRAM1. RAM1. RAM的结构的结构10.1.1 随机存取机随机存取机RAMRAM2. RAMRAM程序程序 一个RAM程序定义了从输入带到输出带的一个映射。可以对这种映

2、射关系作2种不同的解释。解释一:把解释一:把RAMRAM程序看成是计算一个函数程序看成是计算一个函数若一个RAM程序P总是从输入带前n个方格中读入n个整数x1,x2,xn,并且在输出带的第一个方格上输出一个整数y后停机,那么就说程序P计算了函数f(xf(x1 1,x x2 2,x xn n)=y )=y 解释二:把解释二:把RAMRAM程序当作一个语言接受器。程序当作一个语言接受器。将字符串S=a1a2an放在输入带上。在输入带的第一个方格中放入符号a1,第二个方格中放入符号a2,第n个方格中放入符号an。然后在第n+1个方格中放入0,作为输入串的结束标志符。如果一个RAM程序P读了字符串S及

3、结束标志符0后,在输出带的第一格输出一个1并停机,就说程序P接受字符串S。 10.1.1 随机存取机随机存取机RAMRAM3. RAM程序的耗费标准标准一:均匀耗费标准标准一:均匀耗费标准在均匀耗费标准下,每条RAM指令需要一个单位时间;每个寄存器占用一个单位空间。以后除特别注明,RAM程序的复杂性将按照均匀耗费标准衡量。 标准二:对数耗费标准标准二:对数耗费标准对数耗费标准是基于这样的假定,即执行一条指令的耗费与以二进制表示的指令的操作数长度成比例。在RAM计算模型下,假定一个寄存器可存放一个任意大小的整数。因此若设l(i)是整数i所占的二进制位数,则 10.1.2 随机存取存储程序机随机存

4、取存储程序机RASPRASP1. RASPRASP的结构的结构 RASP RASP的整体结构类似于的整体结构类似于RAMRAM,所不同的是,所不同的是RASPRASP的程序的程序是存储在寄存器中的。每条是存储在寄存器中的。每条RASPRASP指令占据指令占据2 2个连续的寄存个连续的寄存器。第一个寄存器存放操作码的编码,第二个寄存器存放器。第一个寄存器存放操作码的编码,第二个寄存器存放地址。地址。RASPRASP指令用整数进行编码。指令用整数进行编码。2. RASPRASP程序的复杂性程序的复杂性不管是在均匀耗费标准下,还是在对数耗费标准下,不管是在均匀耗费标准下,还是在对数耗费标准下,RAM

5、RAM程序和程序和RASPRASP程序的复杂性只差一个常数因子。在一个计算程序的复杂性只差一个常数因子。在一个计算模型下模型下T(n)T(n)时间内完成的输入时间内完成的输入- -输出映射可在另一个计算输出映射可在另一个计算模型下模拟,并在模型下模拟,并在kT(n)kT(n)时间内完成。其中时间内完成。其中k k是一个常数因是一个常数因子。空间复杂性的情况也是类似的。子。空间复杂性的情况也是类似的。 10.1.3 RAMRAM模型的变形与简化模型的变形与简化1. 实随机存取机 RRAM 在RRAM模型下,一个存储单元可以存放一个实数。下列的各运算为基本运算且每个运算只耗费单位时间。 (1)算术

6、运算+,。(2)2个实数间的比较()。(3)间接寻址(整数地址)。(4)常见函数的计算,如三角函数,指数函数,对数函数等。优点:能够方便处理实数;适合于用FORTRAN,PASCAL等高级语言写的算法。 10.1.3 RAMRAM模型的变形与简化模型的变形与简化2. 直线式程序对于许多问题,所设计的RAM程序中的转移指令仅用于重复一组指令,而且重复的次数与问题的输入规模n成比例。在这种情况下,可以用重复地写出相同指令组的方法来消除程序中的循环。由此,对每一个固定的n得到一个无循环的直线式程序。 经过对RAM模型的简化,得到直线式程序的指令系统如下:xy+zxy-zxy*zxy/zxi其中x,y

7、和z是符号地址(或变量),而i是常数。每条指令耗费一个单位时间。每条指令耗费一个单位时间。10.1.3 RAMRAM模型的变形与简化模型的变形与简化3. 位式计算直线式程序计算模型显然是基于均匀耗费标准的。在对数耗费标准下,使用另一个RAM的简化计算模型,称之为位式计算(Bitwise Computation)模型。 除了下列2点外,该计算模型与直线式程序计算模型基本相同:(1)假设所有变量取值0或1,即为位变量。(2)所用的运算是逻辑运算而不是算术运算。用代表与,代表或,代表异或,代表非。 在位式计算模型下,每个逻辑运算指令耗费一个单位时间。在位式计算模型下,每个逻辑运算指令耗费一个单位时间

8、。 10.1.3 RAMRAM模型的变形与简化模型的变形与简化4. 位向量运算(Bit Vector Operations) 若在直线式程序计算模型中,假设所有变量均为位向量,而且所用的运算均为位操作指令,则得到位向量运算计算模型。 例如,要表示一个有100个顶点的图中从顶点v到其余各顶点间有没有边相连,可以用100位的一个位向量表示。若顶点v到顶点vj之间有边相连,则该位向量的第j位为1,否则为0。 缺点:所需的机器字长要远大于其他模型。 10.1.3 RAMRAM模型的变形与简化模型的变形与简化5. 判定树 判定树是一棵二叉树。它的每个内结点表示一个形如xy的比较。指向该结点左儿子的边相应

9、于xy,标号为。指向该结点右儿子的边相应于xy,标号为。每一次比较耗费一个单位时间。下图是对a,b,c三个数进行排序的一棵判定树。 在判定树模型下,在判定树模型下,算法的时间复杂性算法的时间复杂性可用判定树的高度可用判定树的高度衡量。最大的比较衡量。最大的比较次数是从根到叶的次数是从根到叶的最长路径的长度。最长路径的长度。 10.1.3 RAMRAM模型的变形与简化模型的变形与简化6. 6. 代数计算树代数计算树ACTACT以x=(x1,x2,xn)为输入的一棵代数计算树T是一棵二叉树,且:(1)每个叶结点表示一个输出结果YES或NO。(2)每个单儿子内部结点(简单结点)v表示下列形式运算指令

10、: op 或 op 或其中, 和 分别是结点v在树T中的祖先结点v1和v2处得到的结果值,或是x的分量;op+,/;c是一个常数。(3)每个有2个儿子的内部结点(分支结点)v,表示下列形式的测试指令: 0或 0或 =0其中, 是结点v在树T中的祖先结点v1处得到的结果值,或是x的分量。 10.1.3 RAMRAM模型的变形与简化模型的变形与简化7. 7. 代数判定树代数判定树ADT(Algebraic Decision Tree)ADT(Algebraic Decision Tree)在代数计算树T中,若将所有的简单结点都压缩到其最近的子孙分支结点处,并将简单结点处的计算在压缩后的分支结点处同

11、时完成,则计算结果可看作是输入x的一个代数函数fv(x)。由此引出另一个称为代数判定树的计算模型。 代数判定树T是一棵二叉树,且(1)每个叶结点表示输出结果YES或NO。(2)每个内部结点v表示一个形如fv(x1,x2,xn)0的比较。其中,x=( x1,x2,xn)是输入,fv是一个代数函数。 10.1.4 图灵机图灵机1. 多带图灵机10.1.4 图灵机图灵机1. 多带图灵机多带图灵机 根据有限状态控制器的当前状态及每个读写头读到的带符号,图灵机的一个计算步可实现下面3个操作之一或全部。 (1)改变有限状态控制器中的状态。 (2)清除当前读写头下的方格中原有带符号并写上新的带符号。 (3)

12、独立地将任何一个或所有读写头,向左移动一个方格(L)或向右移动一个方格(R)或停在当前单元不动(S)。 10.1.4 图灵机图灵机1. 多带图灵机多带图灵机 k带图灵机可形式化地描述为一个7元组(Q,T,I,b,q0,qf),其中: (1)Q是有限个状态的集合。 (2)T是有限个带符号的集合。 (3)I是输入符号的集合,IT。 (4)b是惟一的空白符,bT-I。 (5)q0是初始状态。 (6)qf是终止(或接受)状态。 (7)是移动函数。它是从QTk的某一子集映射到Q (TL,R,S)k的函数。 10.1.4 图灵机图灵机1. 多带图灵机多带图灵机图灵机M的时间复杂性T(n)是它处理所有长度为

13、n的输入所需的最大计算步数。如果对某个长度为n的输入,图灵机不停机,T(n)对这个n值无定义。 图灵机的空间复杂性S(n)是它处理所有长度为n的输入时,在k条带上所使用过的方格数的总和。如果某个读写头无限地向右移动而不停机,S(n)也无定义。 与RAM模型类似,图灵机既可作为语言接受器,也可作为计算函数的装置。 10.1.5 图灵机模型与图灵机模型与RAMRAM模型的关系模型的关系图灵机模型与RAM模型的关系是指同一问题在这2种不同计算模型下的复杂性之间的关系。 定理定理8-3 8-3 对于问题P的任何长度为n的输入,设求解问题P的算法A在k带图灵机模型TM下的时间复杂性为 ,那么,算法A在R

14、AM模型下的时间复杂性为 。定理定理8-4 8-4 对于问题P的任何长度为n的输入,设求解问题P的算法A在RAM模型下,不含有乘法和除法指令,且按对数耗费标准其时间复杂性为 ,那么,算法A在k带图灵机模型TM下的时间复杂性为 。 10.1.6 问题变换与计算复杂性归约问题变换与计算复杂性归约具体地说,假设有2个问题A和B,将问题问题A A变换为问题变换为问题B B是指:(1)将问题A的输入变换为问题B的适当输入。(2)解出问题B。(3)把问题B的输出变换为问题A的正确解。通过问题变换的技巧,可以将2个不同问题的计算复杂性联系在一起。这样就可以将一个问题的计算复杂性归结为另一个问题的计算复杂性,

15、从而实现问题的计算复杂性归约。10.1.6 问题变换与计算复杂性归约问题变换与计算复杂性归约若用O(n)时间能完成上述变换的第(1)步和第(3)步,则称问题A是(n)时间可变换到问题B,且简记为AA(n)(n)B B。其中的n通常为问题A的规模(大小)。当(n)为n的多项式时,称问题A可在多项式时间内变换为问题B。特别地,当(n)为n的线性函数时,称问题A可线性地变换为问题B。 10.1.6 问题变换与计算复杂性归约问题变换与计算复杂性归约命题命题1(1(计算时间下界归约计算时间下界归约) ):若已知问题A的计算时间下界为T(n),且问题A是(n)可变换到问题B,即A(n)B,则T(n)-O(

16、n)为问题B的一个计算时间下界。命题命题2(2(计算时间上界归约计算时间上界归约) ):若已知问题B的计算时间上界为T(n),且问题A是(n)可变换到问题B,即A(n)B,则T(n)+O(n)是问题A的一个计算时间上界。 问题的变换与问题的计算复杂性归约的关系:在命题1和命题2中,当(n)=o(T(n)时,问题A的下界归约为问题B的下界,问题B的上界归约为问题A的上界。 10.1.6 问题变换与计算复杂性归约问题变换与计算复杂性归约通过问题变换获得问题的计算时间下界的例子:(1)判别函数问题:给定n个实数 ,计算其判别函数 。 元素惟一性问题可以在O(1)时间内变换为判别函数问题。任何一个计算

17、判别函数的算法,计算出判别函数值后,再作一次测试,判断其值是否为0,即可得到元素惟一性问题的解。由命题1即知,元素惟一性问题的计算时间下界 也是判别函数问题的一个计算时间下界。(2)最接近点对问题:给定平面上n个点,找出这n个点中距离最近的2个点。在元素惟一性问题中,将每一个实数 ,1in,变换为平面上的点( ,0),1in,则元素惟一性问题可以在线性时间内变换为最接近点对问题。 10.2 P类与类与NP类问题类问题n10.2.1 非确定性图灵机非确定性图灵机n10.2.2 P P类与类与NPNP类语言类语言n10.2.3 多项式时间验证多项式时间验证10.2.1 非确定性图灵机非确定性图灵机

18、 非确定性图灵机(非确定性图灵机( NDTM NDTM ):一个k带的非确定性图灵机M是一个7元组:(Q,T,I,b,q0,qf)。与确定性图灵机不同的是非确定性图灵机允许移动函数具有不确定性具有不确定性,即对于Q Tk中的每一个值(q;x1,x2,xk),当它属于的定义域时,Q(TL,R,S)k中有惟一的一个子集子集(q;x1,x2,xk)与之对应。可以在(q;x1,x2,xk)中随意选定一个值作为它的函数值。 在图灵机计算模型中,移动函数是单值的是单值的,即对于QTk中的每一个值,当它属于的定义域时,Q(TL,R,S)k中只有惟一的值与之对应,称这种图灵机为确定性图灵机确定性图灵机,简记为

19、DTMDTM(Deterministic Turing Machine)。 10.2.2 P P类与类与NPNP类语言类语言 P类和NP类语言的定义: P=L|L是一个能在多项式时间内多项式时间内被一台DTMDTM所接受的语言 NP=L|L是一个能在多项式时间多项式时间内被一台NDTMNDTM所接受的语言由于一台确定性图灵机可看作是非确定性图灵机的特例,所以可在多项式时间内被确定性图灵机接受的语言也可在多项式时间内被非确定性图灵机接受。故P P NP NP。 10.2.2 P P类与类与NPNP类语言类语言 NPNP类语言举例类语言举例无向图的团问题无向图的团问题。 该问题的输入是一个有n个顶

20、点的无向图G=(V,E)和一个整数k。要求判定图G是否包含一个k顶点的完全子完全子图图( (团团) ),即判定是否存在VV,|V|=k,且对于所有的u,vV,有(u,v)E。 若用邻接矩阵表示图G,用二进制串表示整数k,则团问题的一个实例可以用长度为 的二进位串表示。因此,团问题可表示为语言: CLIQUE=w#v|w,v0,1*,以w为邻接矩阵的图G有一个k顶点的团,其中v是k的二进制表示。 10.2.2 P P类与类与NPNP类语言类语言 接受该语言CLIQUE的非确定性算法非确定性算法:用非确定性选择指令选出包含k个顶点的候选顶点子集V,然后确定性地检查该子集是否是团问题的一个解。算法分

21、为3个阶段: 算法的第一阶段将输入串w#v分解,并计算出n= ,以及用v表示的整数k。若输入不具有形式w#v或|w|不是一个平方数就拒绝该输入。显而易见,第一阶段可 在时间内完成。 在算法的第二阶段中,非确定性地选择V的一个k元子集VV。 算法的第三阶段是确定性地检查V的团性质。若V是一个团则接受输入,否则拒绝输入。这显然可以在 时间内完成。因此,整个算法的时间复杂性为 。非确定性算法在多项式时间内接受语言CLIQUE,故CLIQUENP。 10.2.3 多项式时间验证多项式时间验证 VP=L|L*,为一有限字符集,存在一个多项式p和一个多项式时间验证算法A(X,Y)使得对任意X*,XL当且仅

22、当存在Y*,|Y|p(|X|)且A(X,Y)=1。 多项式时间可验证语言类VP可定义为: 定理定理8-58-5:VP=NP。(证明见书本) 例如(哈密顿回路问题哈密顿回路问题):一个无向图G含有哈密顿回路吗? 无向图G的哈密顿回路是通过G的每个顶点恰好一次的简单回路。可用语言HAM-CYCLE 定义该问题如下:HAM-CYCLE=G|G含有哈密顿回路 10.3NP完全问题完全问题n10.3.1 多项式时间变换多项式时间变换n10.3.2 CookCook定理定理10.3.1 多项式时间变换多项式时间变换 定义:定义:语言L是NP完全的当且仅当 (1)LNP; (2)对于所有LNP有L p L。

23、 如果有一个语言L满足上述性质(2),但不一定满足性质(1),则称该语言是NPNP难难的。所有NP完全语言构成的语言类称为NPNP完完全语言类全语言类,记为NPCNPC。 设 , 是2个语言。所谓语言 能在多项式时间内变换为语言 (简记为 p )是指存在映射f: ,且f满足: (1)有一个计算f的多项式时间确定性图灵机; (2)对于所有x ,x ,当且仅当f(x) 。 10.3.1 多项式时间变换多项式时间变换 定理定理8-68-6:设L是NP完全的,则 (1)LP当且仅当PNP; (2)若Lp ,且 NP,则 是NP完全的。 定理定理8-68-6的的(2)(2)可用可用来证明问题的来证明问题

24、的NPNP完完全性。但前提是:全性。但前提是:要有第一个要有第一个NPNP完全完全问题问题L L。10.3.2 CookCook定理定理 定理定理8-7(Cook定理定理):布尔表达式的可满足性问题SAT是NP完全的。 证明:SAT的一个实例是k个布尔变量 , 的m个布尔表达式 , 若存在各布尔变量 (1ik)的0,1赋值,使每个布尔表达式 (1im)都取值1,则称布尔表达式 是可满足的。 SATNP是很明显的。对于任给的布尔变量 , 的0,1赋值,容易在多项式时间内验证相应的 的取值是否为1。因此,SATNP。 现在只要证明对任意的LNP有LpSAT即可。(详细证明见书本P307310)10

25、.4 一些典型的一些典型的NP完全问题完全问题部分NP完全问题树10.4.1 合取范式的可满足性问题合取范式的可满足性问题(CNF-SATCNF-SAT) 要证明CNF-SATNPC,只要证明在Cook定理中定义的布尔表达式A,G或者已是合取范式,或者有的虽然不是合取范式,但可以用布尔代数中的变换方法将它们化成合取范式,而且合取范式的长度与原表达式的长度只差一个常数因子。 问题描述:问题描述:给定一个合取范式,判定它是否可满足。 如果一个布尔表达式是一些因子和之积,则称之为合取范式,简称CNF(Conjunctive Normal Form)。这里的因子是变量 或 。例如: 就是一个合取范式,

26、而 就不是合取范式。 10.4.2 3 3元合取范式的可满足性问题元合取范式的可满足性问题(3-SAT3-SAT)证明思路:证明思路: 3-SATNP是显而易见的。为了证明3-SATNPC,只要证明CNF-SATp 3-SAT,即合取范式的可满足性问题可在多项式时间内变换为3-SAT。 问题描述:问题描述:给定一个3元合取范式,判定它是否可满足。 10.4.3 团问题团问题CLIQUECLIQUE 证明思路:证明思路: 已经知道CLIQUENP。通过3-SATpCLIQUE来证明CLIQUE是NP难的,从而证明团问题是NP完全的。 问题描述:问题描述:给定一个无向图G=(V,E)和一个正整数k

27、,判定图G是否包含一个k团,即是否存在,VV,|V|=k,且对任意u,wV有(u,w)E。 10.4.4 顶点覆盖问题顶点覆盖问题(VERTEX-COVERVERTEX-COVER) 证明思路:证明思路: 首先,VERTEX-COVERNP。因为对于给定的图G和正整数k以及一个“证书”V,验证|V|=k,然后对每条边(u,v)E,检查是否有uV或vV,显然可在多项式时间内完成。 其次,通过CLIQUEpVERTEX-COVER来证明顶点覆盖问题是NP难的。 问题描述:问题描述:给定一个无向图G=(V,E)和一个正整数k,判定是否存在VV,|V|=k,使得对于任意(u,v)E有uV或vV。如果存

28、在这样的V,就称V为图G的一个大小为k顶点覆盖。 10.4.5 子集和问题子集和问题(SUBSET-SUMSUBSET-SUM) 问题描述:问题描述:给定整数集合S和一个整数t,判定是否存在S的一个子集SS,使得S中整数的和为t。例如,若S=1,4,16,64,256,1040,1041,1093,1284,1344且t=3754,则子集S=1,16,64,256,1040,1093,1284是一个解。 证明思路:证明思路: 首先,对于子集和问题的一个实例,给定一个“证书”S,要验证t= 是否成立,显然可在多项式时间内完成。因此,SUBSET-SUMNP; 其次,证明VERTEX-COVERp

29、SUBSET-SUM。 10.4.6 哈密顿回路问题哈密顿回路问题(HAM-CYCLEHAM-CYCLE) 证明思路:证明思路: 首先,已知哈密顿回路问题是一个NP类问题。 其次,通过证明3-SATpHAM-CYCLE,得出:HAM-CYCLENPC。 问题描述:问题描述:给定无向图G=(V,E),判定其是否含有一哈密顿回路。 10.4.7 旅行售旅行售货员问题货员问题TSP 首先,给定TSP的一个实例(G,c,k),和一个由n个顶点组成的顶点序列。验证算法要验证这n个顶点组成的序列是图G的一条回路,且经过每个顶点一次。另外,将每条边的费用加起来,并验证所得的和不超过k。这个过程显然可在多项式时间内完成,即TSPNP。 其次,旅行售货员问题与哈密顿回路问题有着密切的联系。哈密顿回路问题可在多项式时间内变换为旅行售货员问题。即HAM-CYCLEpTSP。从而,旅行售货员问题是NP难的。 因此,TSPNPC。 问题描述:问题描述:给定一个无向完全图G=(V,E)及定义在VV上的一个费用函数c和一个整数k,判定G是否存在经过V中各顶点恰好一次的回路,使得该回路的费用不超过k。 SEE YOUSEE YOU

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号