易解和难解问题Word文件下载.docx

上传人:b****5 文档编号:19200058 上传时间:2023-01-04 格式:DOCX 页数:21 大小:115.34KB
下载 相关 举报
易解和难解问题Word文件下载.docx_第1页
第1页 / 共21页
易解和难解问题Word文件下载.docx_第2页
第2页 / 共21页
易解和难解问题Word文件下载.docx_第3页
第3页 / 共21页
易解和难解问题Word文件下载.docx_第4页
第4页 / 共21页
易解和难解问题Word文件下载.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

易解和难解问题Word文件下载.docx

《易解和难解问题Word文件下载.docx》由会员分享,可在线阅读,更多相关《易解和难解问题Word文件下载.docx(21页珍藏版)》请在冰豆网上搜索。

易解和难解问题Word文件下载.docx

后面的描述这4个集合相互间关系的定理来自14.3节的定理结论。

定理15.1PNPPSpace=NPSpace。

证明:

第一个包含关系已经在前面提到,显然成立。

第二个包含关系来自定理14.6的命题1,第三个包含关系来自定理14.6的命题3。

后面两个结论的证明也用到了这样的事实:

稍加限制,多项式时间函数是计步函数。

正如我们在14.2节讨论的,一个非确定型图林机(NTM)比普通图林机存在一个很大的优点,即它预备猜测的能力,而正确的猜测能够快速地完成处理。

在例子14.3,平方级时间复杂性的NTM反映了我们可以在平方级时间里检测问题的一个答案,但并不意味着所有的答案都能够在平方级时间里得到检查。

正如我们在14.3看到的,用定理9.2证明中构造的确定型图林机替代一个NTM可能导致时间复杂性呈指数级增长。

事实上,这个结论对于所有的消除图林机非确定性的通用方法都成立。

因此,容易理解为什么存在许多属于NP的语言或问题没有确定型的多项式时间的算法。

换句话说,存在许多NP中的语言不知道是否属于P。

令人惊讶的是,不存在一个已知不属于P的语言或问题属于NP。

尽管最合理的猜测是,P是NP的真子集,但没有人能够证明这个结论,尽管许多人做过这方面的努力。

NP中包括许多有趣的问题,它们在很长时间来得到了充分的研究,但是研究者没有找到一个多项式时间的算法,也没有证明不存在多项式时间的算法。

单凭经验,我们知道发现一个好的下界比发现一个上界要难。

特别地,展示一个问题的解决方法比证明一个问题没有有效的解决方法要容易。

无论那种情况,问题P

NP是理论计算机科学中引人瞩目的一个未解决的问题。

定理15.1的第二个包含关系是否是严格的包含也是一个未解决的问题。

总结这两个问题,我们的结论是非确定性在描述复杂性中的角色还没有得到很好的理解。

本节的最后部分,我们将研究NP中的两个问题,存在几个理由值得我们对它们感兴趣。

第一个问题很容易显示属于NP,但是,我们将在下一节看到,精确地将,它是NP中最难的问题。

第二个问题属于NP不是很明显,因为它不符合“猜测一个答案,然后在多项式时间内检查这个答案”的模式,然而,它被证明属于NP。

例子15.1(可满足问题)这个问题的一个实例是一个逻辑表达式,它包含变量xi和逻辑连接词(与或非)。

我们用

表示xi。

术语“文字”表示一个xi或

假设表达式是一个合取范式

C1...Cc

其中每个子表达式Ci称为合取项,它是一个析取式(由文字和连接而成),比如下面的表达式

(x1x3x4)(

x3)(

x4

(x2

是一个由5个合取项组成的合取范式。

总的来说,在一个合取项中,一个变量可能出现多次,而且合取项本身可能与其他合取项相同。

此处,我们引入另一个限制,对于某个v>

=1,表达式中的所有变量来自集合{x1,...,xv}。

容易检验下面的真值赋值满足前面的表达式

x2=x4=true

x1=x3=false

满足问题(简记为Sat)表述如下:

给定一个形式为合取范式的逻辑表达式,是否存在一个真值赋值满足它?

我们可以将满足问题的实例表示成一个直观的形式,省略括号和或运算符,用单元记号表示下标(比如2表示成11)。

比如表达式

(x1

)(x2x3

)(

x2)

可以表示成下面的字符串

x1

11x11x111

1

1111x11

我们定义语言Satisfable是问题Sat的所有肯定实例在字母表{,x,

1}上的编码组成的集合。

我们的编码方案是否合理?

我们考虑一个有k个文字(不必不同),c个合取项,v个不同变量的实例。

如果n是这个实例编码后的字符串的长度,则

n=<

k(v+1)+c<

=k2+2k

第一个不定式中的v+1表示每个文字和它的下标的长度的上界,第二个不等式用到的条件是v和c都小于等于k。

n和k的关系预示了任何一个n的多项式受限于k的一个多项式,因此k看起来是一个合理的衡量问题实例规模的尺度。

因此如果SatisfiableNP,那么可以说判定问题Sat属于NP。

我们能够很容易地描述一个单带图林机T接受Satisfiable的步骤。

第一步检查输入字符串是否表示了一个有效的合取范式;

如果是,T尝试找到满足这个合取范式的赋值。

T在处理过程中,T跟踪那些满足了的合取项和未满足合取项中已经赋值的变量。

这个循环过程如下,找到第一个未满足的合取项,选择一个该合取项中未赋值的变量(这个整个过程中唯一用到不确定方法的地方),给该变量赋值使得这个合取项为真,标记这个合取项为满足,然后处理下一个未满足合取项。

这个循环过程在下面两种情况下终止:

1)所有的合取项得到满足2)第一个未满足合取项的所有文字都是假。

出现第一种情况,T停机;

出现第二种情况,T崩溃。

如果表达式是可满足的,T正确选择的移动对应了T猜测到了一个满足表达式的真值赋值。

上面构造的图林机T,除了几步耗时为O(n),其他动作都是下面操作的简单变形:

从1组成的字符串开始,确定两端的边界(两端不是1的符号),然后确定这个字符串在其他地方出现的位置。

容易证明(留作练习)上面操作的一次执行需要的时间是n的多项式,而整个过程需要执行这种类型的操作的次数是n的多项式(参见练习15.2,T的非确定型时间复杂性是O(n3))。

我们的结论是语言Satisfiable和问题Sat属于NP。

我们将在下一节回到Sat。

首先,应该观察到一个表达式可能的不同真值赋值的种类是2j,其中j是不同变量的个数。

这个事实并不是意味着问题Sat一定不属于P,但是它告诉我们,如果使用“蛮力”方法逐个尝试所有可能的解决方案,那么无助于发现多项式时间的算法。

例子15.2(素数问题)这是一个熟悉的判定问题,给定一个正整数n,问n是否是一个素数?

对于这个问题的第一个观察是我们应该更注意编码方法。

如果n使用单元记号,那么解决算法的复杂性是多项式,甚至线性的;

如果使用二元记号,那么复杂性是指数级的。

注意n的二元记号的长度是logn,我们所说的“多项式”和“指数级”都是对logn而言,而不是n。

因此,实践中,我们常用的检查所有

以内的除数的算法是不可取的(这是?

这个问题还展示了一个问题是肯定还是否定的重要性。

合成数判定问题:

给定一个整数n,问它是否是一个合成数(非素数)?

这个问题有一个简单的非确定性解决方法,猜测n的可能的因子p和q,然后使用乘法检查符合n=p*q,因此它属于NP。

但是素数问题不是明显地属于NP,因为找不到一个明显的猜测的方法。

从语言层面来看,一个语言属于NP不能引申出它的补集也属于NP(参见15.5和15.6)。

但是我们可以利用数字理论中的一些结论来证明素数问题属于NP。

首先,回忆第1章24页提到的n的全等模(congruencemod)关系=n,它定义如下

a=nb当且仅当a-b被n整除

数字理论中有下面两个结论

1.一个正整数n是素数当且仅当存在一个数字x,1<

x<

n-1,满足xn-1=n1,且对于每个1<

m<

n-1,xmn1。

2.如果n不是素数,那么对于每个0<

n-1,满足xn-1=n1,而且对于n-1的某个素数因子p,有x(n-1)/p=n1

第一个结论来自Fermat,我们简单说明结论2。

如果xn-1=n1并且n不是素数,那么根据命题1,存在m<

n-1,使得xm=n1。

我们注意到最小的m必须是n-1的一个除数。

原因是当我们用m除n-1,我们得到商q和余数r,因此

n-1=q*m+r,0=<

r<

m

这意味着xn-1=xqm+r=(xm)q*xr,并且由于xn-1和xm在n上的全等模都是1,因此(xm)q=n1,xr=n1。

根据定义,m是符合xm=n1的最小的正整数,而r<

m,因此r=0,因此n-1被m整除。

现在,n-1的任意一个真除数都有形式(n-1)/j,j是某个大于1的数,且是n-1的素数因子的乘积。

因此m的某个乘积,比如a*m是(n-1)/p的形式,p是某个素数。

由于xa*m=(xm)a=n1,因此得到命题2。

第一个命题的意义是我们发现了n是素数的如下表述:

“存在一个数字x,...”,这预示了潜在的非确定性方法:

猜测一个x,然后测试它。

现在,为了测试x看起来我们需要测试所有满足1<

n-1的m,并确信xmn1。

如果这真的是必要的,那么这个非确定性没有什么帮助,我们还不如回到通常的素数测试方法,测试n的所有除数。

第二个命题的意义是为了测试x,我们不必测试所有的m,只测试形式为(n-1)/p的m(p为n-1的某个素数因子,根据命题2,如果n不是一个素数,某个符合上面形式的m,满足xm=n1)。

这里再次引入了非确定性方法,我们用猜测的方法发现素数p。

有了上面的准备,我们得到下面接受素数集的递归非确定性过程。

Is_Prime(n)

ifn=2returntrue

elseifn>

2andnisevenreturnfalse

else{

guessxwith1<

n

ifxn-1n1returnfalse

guessafactorizationp1,...,pkofn-1

fori=1tok

ifnotIs_Prime(pi)returnfalse

ifp1*...*pkn-1returnfalse

ifx(n-1)/p=n1returnfalse

returntrue

}

一个图林机能够模拟这个递归过程,并使用它的磁带保存“活动记录”的栈,这个方法在定理14.6的证明中提到。

图林机执行“returnfalse”的方式是崩溃。

现在我们需要说明这个非确定性算法执行时间是多项式的。

我们给出大致的思路,细节留作练习。

执行Is_Prime(n)的时间可以分成两部分:

k次递归调用Is_Prime(pi)的时间和其余的时间。

容易看到,存在常量c和整数d,除了递归调用部分的时间开销,其他部分时间不超过c(logn)d(?

)(注意logn是输入字符串的长度)。

设T(n)是整个非确定性时间,则

T(n)<

=c(logn)d+

应用归纳法得到

=C(logn)d+1

其中C是某个足够大的常量。

在归纳步骤中,如果根据归纳假设,我们知道对于每个i,有

T(pi)<

=C(logpi)d+1

那么我们只需要证明

c(logn)d+C(logpi)d+1<

=

<

=Clog(p1*...*pk)d+1

<

=Clog(n-1)d+1

显然容易选择一个独立于n的C,满足上面的式子。

15.2多项式时间规约和NP完全

正如我们已经看到的,形如Time(f)和Space(f)的复杂类给了我们比较两个问题或语言的复杂性或难度的方法。

正如第12章,我们引入描述语言L1和L2相对复杂性的方法,而不考虑每个语言的绝对复杂性。

第12章引入的方法是,对于语言L1和L2,如果存在一个可计算函数f,使得判定xL1相当于判定f(x)L2,那么称L1规约到L2,即L1没有L2“难”,因此检查L1的成员资格转化成下面两步:

1)计算f;

2)检查L2的成员资格。

短语“没有...难”在此处是合理的,因为我们只是区分两种“难”的程度:

“可解”和“无解”。

由于f是可计算的,因此它不会破坏从“可解”到“无解”的平衡。

现在,我们使用了更细化的复杂性分类系统,我们希望新的比较是数量和数量之间的比较。

因此对上面定义的一个合适的修改是指明f应该在合理的时间里可计算,此处,这个合理的时间指的是多项式时间。

定义15.1(多项式时间规约)如果L1和L2分别是字母表1和2的语言,我们说L1是多项式时间规约到L2,写成L1<

=pL2,如果满足下面条件:

如果存在一个函数f:

1*2*,使得对于每个x1*,xL1当且仅当f(x)L2,并且f能够在多项式时间里得到计算。

即存在一个具有多项式时间复杂性的图林机计算f。

下面给出的关系<

=p的性质是容易理解的,而且与“没有...难”在上下文的含义相一致。

定理15.2

1.关系<

=p具有传递性:

如果L1<

=pL2,L2<

=pL3,则L1<

=pL3。

2.如果L2P且L1<

=pL2,则L1P。

3.如果L2NP且L1<

=pL2,则L1NP。

证明:

(a)设三个语言的字母表分别是1,2,3。

并且f:

1*2*和g:

2*3*是规约中涉及到的两个函数。

那么得到复合函数gf:

1*3*,且对于每个x1*,xL1当且仅当gf(x)L3。

现在只需要说明gf是多项式时间可计算的。

设Tf和Tg分别是计算f和g的图林机,根据定义,

Cnj+D

Cnk+D

其中C和D是常量,j和k是整数。

显然计算gf的复合图林机是T=TfTg。

现在要证明这个复合图林机的时间复杂性是多项式的。

考虑Tf计算f(x)的移动步数x,如果x<

=|x|,则Tf不会到达输入字符串的最右的符号或在它右边格子写入符号,因此|f(x)|=|x|;

否则由于输出长度为|f(x)|的字符串至少需要|f(x)|步移动,则有|f(x)|<

=x。

综合两种情况,得到

|f(x)|<

=x+|x|<

+|x|

因此对于任意x1*,下面的推导成立

+

C|x|j+D+C|f(x)|k+D

C|x|j+D+C(

+|x|)k+D

C|x|j+D+C(C|x|j+D+|x|)k+D

=O(|x|jk)

所以T的时间复杂性是多项式的。

(b)设以多项式时间接受语言L2的图林机是T2,根据条件,存在一个函数f:

1*2*,f被图林机Tf以多项式时间计算,使得对于每个x1*,xL1当且仅当f(x)L2。

令图林机T=TfT2。

显然T接受语言L1,且根据(a)部分的证明,T的时间复杂性是多项式的,因此L1P。

(c)这里的参数与(b)部分相同,除了接受L2的机器是NTM,复合图林机T=TfT2接受L1,(a)部分的推导在非确定型时间复杂性的条件下仍然成立。

因此L1NP。

如果我们继续要求问题实例的合理编码,那么我们可以将定义15.1和定理15.2推广到判定问题。

我们因此能够讨论多项式时间的判定问题以多项式时间规约到另一个问题,然后应用这个技术显示判定问题属于P或NP。

在我们的第一个多项式时间规约的例子,我们显示例子15.1的问题Sat可以规约到有关无向图的一个判定问题。

我们给出这个规约的目的不是显示一个语言属于P或NP(我们已经知道Sat属于NP,而现在还无法知道这个图论问题属于P)。

我们而是想说明,尽管Sat是NP中很难的问题了,但存在不比它容易的问题。

例子15.3我们先给出一些术语。

一个图是一个二元组G=(V,E),其中V是一个节点组成的有限非空集,E是边组成的有限集(边可以看成无序节点对,无序的含义是节点对(v1,v2)与(v2,v1)相同)。

边(v1,v2)称为连接节点v1和v2,或称它的两个端点是v1和v2,称v1和v2相邻。

G的子图是节点集和边集都是G的节点集和边集的子集的图。

全图是任意两个节点都是相邻的图,有时也称为clique。

一个有7个节点和10个边的图(graph)G的示意性图(diagram)如图(figure)15-1所示。

G有一个完全子图(由节点3,5,6,7组成)和其他几个比较小的完全子图。

完全子图问题是:

给定一个G和整数k,G是否有一个k个节点的完全子图?

容易发现这个问题属于NP:

一个NTM获得问题的一个实例(G,k)的编码,然后非确定地选择k个节点,检查所有的边,从而判定是否每两个节点都是相邻的。

我们令完全子图问题对应的语言是CompleteSub,假设用单元记号表示节点,那么图的描述是一组表示节点的字符串和表示节点对的字符串(每个节点对表示了一条边)。

为了字符串能够获得唯一的解码,这些字符串中适当地插入一些0。

我们证明问题Sat能够多项式时间规约到完全子图问题,或说SatisfiablepCompleteSub。

当我们讨论第12章的规约时,面对的上下文是可解问题,我们给出了两个定义:

关于语言的定义12.1和关于问题的定义12.1a。

此处最容易理解的是采用第二种方式定义的规约。

我们希望相应的字符串规约函数符合多项式时间的要求。

我们必须给每个合取范式x构造一个完全子图问题的实例f(x)(即一个图Gx,和一个整数kx),使得x是可满足的当且仅当Gx有一个kx个节点的完全子图。

令x是下面的表达式

x=

其中每个ai,j是一个文字,我们希望Gx的节点精确地对应x中出现的项ai,j;

Vx={(i,j)|1=<

i<

=c,1=<

j<

=di}

Gx的边表示了节点(i,j)相邻于(l,m)当且仅当存在一个真值赋值使得这两个在不同合取项中的文字都为真,即

Ex={((i,j),(l,m))|ilandai,jal,m}

最后,我们令整数kx是x中合取项的数目c。

如果x是可满足的,那么存在一个真值赋值,使得对于每个i,存在一个文字

,它从获得的值为真,而且这些节点

(1,j1),(2,j2),...,(k,jk)

确定了一个Gx的一个完全子图,因为我们在我们定义Gx时,已经指明了这些节点是两两相邻的。

另一方面,假设Gx有一个kx个节点的完全子图,由于这kx个节点之间不存在相互为非的文字,,因此存在一个真值赋值使得它们都为真,而且由于这些文字在不同的合取项中,这个赋值使得每个合取项中至少有一个文字为真,因此x得到满足。

现在,我们考虑计算的时间开销,从表示x的字符串w开始,到构造表示(Gx,kx)的字符串完结束。

图中的节点可以通过扫描一趟w完成,对于x中特定合取项的特定文字,通过检查其他合取项中的所有文字,如果不是“非”关系,则添加一个新的边。

发现其他合取项,识别该合取项中的其他文字,并且比较这个文字与原来的文字,这些过程都可以在多项式时间里完成,因此整个时间复杂性是多项式的。

正如例子15.3揭示,多项式时间的规约关系用于衡量两个语言的相对复杂性。

它也提供了描述绝对复杂性的方法:

我们可以考虑NP集合中一个最难的语言(注意后面将显示很多语言都符合最难的标准)。

定义15.2(NP难和NP完全语言)一个语言L被称为是NP难的,如果对于每个L1NP,都有L1pL。

如果LNP,且L是NP难的,那么L称为是NP完全语言。

定理15.3

1.如果语言L和L1满足LpL1,并且L是NP难的,那么L1也是NP难的。

2.如果L是任意一个NP完全语言,LP当且仅当P=NP。

这两个命题可以从定理15.2和定义15.2直接得到。

正如前面讨论的,定义15.2和定理15.3也可以推广到判定问题。

一个NP完全问题是一个NP完全语言对应的问题。

假设我们知道了一个NP完全问题,定理15.3给出了得到更多NP完全问题的方法。

当然发现第一个NP完全问题并不是容易的。

NP集合包含了许多看起来各不相关的问题:

它们涉及图论、网络、集合、划分、调度、数论、逻辑,以及其他等等。

有理由期望其中一些问题比另一些更复杂,甚至存在“最”复杂的问题。

一个NP完全问题不仅是难的问题,而且是原型问题:

找到了一个好的解决NP完全问题的算法能够保证NP中的每个其他问题都有相当的解决算法。

练习15.19描述了获得一个“人工”NP完全问题的方法。

下一节我们将看到StephenCook的著名结果,语言Satisfiable(或判定问题Sat)是NP完全的。

这个结果,与多项式规约技术和定理15.3一道,证明了有趣的、得到广泛研究的问题都是NP完全的。

定理15.3从两个角度指示了NP完全在复杂性理论中具有重要的意义。

一方面,如果某人展示了某个NP完全问题能够被多项式时间的算法解决,那么就解决了P

NP的问题,NP将不会作为一个单独的复杂类存在,研究者将确信他们不是在荒谬无益的道路上探索,加倍努力找到那些被认为是NP问题的多项式时间的算法。

另一方面,只要这个问题仍然是未解的(或者某人成功地证明了PNP),那么通过将问题Q在多项式时间规约到某个NP难的问题,就令人信服地说明了Q的难度。

15.3Cook定理

NP完全的想法由StephenCook在1971年引入。

我们的第一个NP完全问题的例子是满足问题(参见例子15.1),Cook证明了它是NP完全的。

证明的过程很复杂,但是也许正是所估计到的。

虽然在例子15.3,我们能够使用特定判定问题的特征去构造一个规约函数,但是在这里我们必须证明存在一个通用的规约方法,能够将NP中的任何问题在多项式时间里规约到Sat。

在任何情况下,一旦我们发现了一个NP完全问题,得到其他NP完全问题就要容易很多。

下面证明中,我们使用记号

表示合取式

A1...An

析取式有类似的缩写记号。

正如例子15.1,

表示a的求“非”的结果。

下面有关boolean公式的结果将用到本节的证明中。

引理15.1令F是任意的boolean表达式,包含的变量是a1,...,at,那么F在逻辑上等价于一个合取范式,即下面的形式

其中bi,j要么是ar,要么是

首先,容易证明任意一个逻辑表达式都能找到等价的析取范式,即

为了找到这个析取范式,我们引入下面的记号。

对于变量上的任意真值赋值和整数j,j介于1和t之间,令

j=

这样,使得每个,j都为真,并且如果真值赋值赋予了aj不同的值,那么,j

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 畜牧兽医

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1