计算复杂性理论031104(2)
计算复杂性理论
计算复杂性理论计算复杂性理论是计算机科学中重要的一个分支,它研究了计算问题的难度和可解性。
通过对问题的复杂性进行分析和分类,计算复杂性理论为我们提供了解决问题的指导原则和限制条件。
本文将介绍计算复杂性理论的基本概念、主要研究内容以及其在实际应用中的重要性。
一、基本概念1. P和NP问题在计算复杂性理论中,最基本的概念是P问题和NP问题。
P 问题是指可以在多项式时间内解决的问题,即存在一个算法可以在多项式时间内给出问题的正确答案。
而NP问题则是指可以在多项式时间内验证答案的问题,但尚未找到多项式时间内解决的算法。
P问题是NP问题的子集,即所有的P问题也是NP问题,但目前尚不清楚P问题和NP问题是否是相同的类。
2. NP完全性NP完全性是计算复杂性理论中的一个关键概念,它指的是一类最困难的NP问题。
一个问题被称为是NP完全的,如果它既是一个NP问题,又满足以下条件:对于任何一个NP问题,都可以用多项式时间的算法将其约化为该问题。
换句话说,如果我们能够找到一个多项式时间算法来解决一个NP完全问题,那么我们也可以用同样的算法来解决所有的NP问题。
3. NP难度除了NP完全性概念,计算复杂性理论还引入了NP难度的概念。
一个问题被称为是NP难度的,如果对于任何一个NP问题,都可以用多项式时间的算法将其约化为该问题。
虽然NP难度问题不一定是NP问题,但它们和NP完全问题一样,都是十分困难的问题。
二、主要研究内容1. 多项式时间算法计算复杂性理论的一个主要研究内容是寻找和分析多项式时间算法。
多项式时间算法是指可以在多项式时间内解决的算法,即其执行时间与输入规模呈多项式关系。
研究多项式时间算法的目标是寻找高效的解决方法,从而提高问题的可解性。
2. 算法复杂性分析算法复杂性分析是计算复杂性理论中的另一个重要内容。
通过对算法的复杂性进行全面的分析,我们可以预测算法在实际应用中的性能表现。
算法复杂性分析的主要方法包括时间复杂性分析和空间复杂性分析,通过对算法的时间和空间需求进行测量和评估,我们可以判断算法在给定条件下的可行性和效率。
浅谈计算复杂性理论
浅谈计算复杂性理论任忠乌鲁木齐石化公司计控中心摘要:本文阐述了计算复杂性理论的产生、定义、研究内容和发展。
关键词:算法分析;计算复杂性;起源;发展1.计算法复杂性理论的起源在几千年的数学发展中,人们研究了各式各样的计算,创立了许多算法。
但是,以计算或算法本身的性质为研究对象的数学理论,却是在20世纪30年代才发展起来的。
1936年,为了讨论对于每个问题是否都有求解算法,数理逻辑学家提出了几种不同的计算模型的定义。
K.Godel和S.C.Kleene等人创立了递归函数论,将数论函数的算法、可计算性刻画为递归可枚举性。
A.M.Turing和E.L.Post提出了理想计算机的概念,将问题算法可解性刻画为在具有严格定义的理想计算机上的可解性。
40年代以后,随着计算机科学技术的发展,研究的焦点从理论可计算法转移到现实可计算性上。
人们不仅需要研究理论上的、原则上的可计算性,还要研究现实的可计算性,即研究计算一个问题类需要多少时间,多少存储空间,研究哪些问题是现实可计算的,哪些问题虽然原则上可计算,但由于计算的量太大而实际上无法计算等。
因而一般算法设计方法研究和对一类问题算法解的难度分析便成为计算机科学的热点。
此后,计算复杂性的研究等不断有所发展。
由此产生了算法学和计算复杂性理论等新兴研究领域。
计算复杂性大的进展始于50年代末、60年代初,当时在美国有两个并行的中心,一个是通用电气公司设立于纽约州Schenectady的研究实验室,核心人物是J.Hartmanis和R.Stearns。
1964年11月,他们在普林斯顿举行的第五届开关电路理论和逻辑设计学术年会上发表了论文"Computational Complexity of recursivese quences",论文中首次使用了"计算复杂性"这一术语,由此开辟了计算机科学中的一个新领域,并为之奠定了理论基础。
他们两人是1993年度图灵奖获得者。
计算机科学中的计算复杂性理论
计算机科学中的计算复杂性理论计算复杂性理论是计算机科学中的一个重要分支,研究的是计算问题的算法复杂性和计算机问题的可解性。
它帮助我们理解计算问题是否有高效的解决方法,为设计和分析算法提供了基础。
一、引言计算复杂性理论涉及到算法的效率和计算问题的可解性,对计算机科学和信息技术具有重要意义。
本文将首先介绍计算复杂性理论的起源和发展,然后重点讨论几个计算复杂性理论中的重要概念和问题。
二、计算复杂性理论的起源和发展计算复杂性理论起源于20世纪60年代,由对计算问题的可解性进行研究逐渐演化而来。
该理论的研究者,如图灵奖得主阿隆佐·邱奇、史蒂芬·库克等,提出了多个理论模型和概念,奠定了计算复杂性理论的基础。
三、计算复杂性理论的重要概念1. P问题和NP问题在计算复杂性理论中,P问题指的是可以在多项式时间内解决的问题,而NP问题则是指可以在多项式时间内验证给定解是否正确的问题。
其中,P问题是NP问题的一个子集,即P⊆NP。
2. NP完全性NP完全性是计算复杂性理论中的一个重要概念。
一个问题是NP完全的,意味着它是NP问题中最难的一类。
如果我们能够找到一个多项式时间内解决NP完全问题的算法,那么可以得出P = NP的结论,这是计算机科学中的一个重大问题。
3. 计算复杂性度量计算复杂性理论通过引入时间复杂性和空间复杂性度量来衡量算法的效率。
其中,时间复杂性度量算法执行所需的时间步数,空间复杂性度量算法所需的存储空间。
这些度量帮助我们选择具有高效率的算法,提高计算问题的解决速度。
四、计算复杂性问题的研究方法计算复杂性理论研究问题的方法主要有两种:证明方法和求解方法。
证明方法通过证明某个问题是NP完全的来研究问题难度;而求解方法则是通过设计高效的算法来解决问题。
1. 证明方法证明方法是计算复杂性理论中常用的方法之一,它使用约简技术将一个已知的NP完全问题转化为待研究问题,从而证明待研究问题也是NP完全的。
计算复杂性理论
如果问题的答案只有两种可能:是或者否,则称这个问题是的,则称判定问题是可判定的或可解的。
图灵机的不可判定问题:
图灵机的停机问题:任给DTM M和格局б,从格局б开始,M是否最终停机。
DTM M的停机问题:任给格局б,从格局б开始,M是否最终停机。
相关结论:
正则表达式可以构造等价的NFA。
DFA和NFA计算能力是相等的,二者等价。DFA与NFA仅仅是控制函数的不同。
定理:语言L能被DFA接受当且仅当语言L能被NFA接受
定理:语言L是正则语言当且仅当存在DFA M使L=L(M)。
3)
正则语言是正则集,可以用正则表达式的简单式子来表示。对任意一个给定的正则表达式可以构造出不确定有限自动机来接收它,反过来,从任意有限自动机可以找出它所接受的正则表达式。不满足正则语言的条件则为非正则语言。
4)
泵引理:设DFA M有n个状态,L=L(M),x L,|x| n,则x=uvw且满足下述条件:1)v 2)|uv| n 3)对任意的i 0,
作用:泵引理揭示了正规语言普遍具有的这样一个封闭性质如果L是一个正规语言那么存在一个正整数k, L中那些长度k的句子中都含有这样的一段子串 把这个子串重复任意多次后形成的句子仍然是L中的语句。
推论 假设P≠NP如果L是NP难的则L∉P
定理 若存在NP难的语言 都有 ≤ ,则L也是NP难的。推论 若L∈NP并且存在NP完全的语言 使 ≤ ,则L也是NP完全的。
2)Cook定理的内容证明及意义
Cook定理:可满足性问题是NP完全的
判读SAT的非确定型多项式时间算法如下:对任给的合取范式F,先猜想一个赋值,然后检查它是否使F成真。故而SAT NP。
NFA的定义:
NFA也有5部分组成,M=(Q,a,δ, ,F),其中Q,A,, ,F与DFA相同,但是δ是Q C到Q的二元关系。
《复杂性理论》讲义2
第二章算法问题及其复杂性2.1 什么是算法问题?1.算法问题(可解的问题)——简单地说,就是存在求解算法的问题。
例子(见书)2. 算法问题定义(1) 一个可行的(即语法正确的)输入集的描述——每个输入可表为在一个有限字母表上的有限字母串;(2)一个函数的描述——将每个输入映射到一个非空的正确输出集,每个输出也是一个有限字母表上的有限序列。
3. 问题和问题实例4. 关于算法问题的输入好算法的计算时间与问题的输入形式有关。
然而,一个问题的所有合理的输入形式往往导出的算法问题是类似的。
因此一般可以忽略问题的具体输入形式。
例如,一个图使用邻接表表示和用邻接矩阵表示看作是没有太大区别。
5. 算法问题的几种形式搜索问题、优化问题、求值问题、判定问题(形式语言)2.2 一些重要的算法问题1. 旅行商问题 (TSP)——有多种变型2. 0/1背包问题3. 划分问题4. 监控(覆盖)问题5. 团问题6. 组队问题7. 网络中的最优流问题8. 运动联盟的冠军问题9. 验证问题10. 数论问题(素数测试、分解质因数)2.3 如何度量算法的计算时间?1.什么是算法?——直观地讲,算法就是一个无歧义的指令集,它规定了根据输入如何一步步得出一个正确输出的步骤。
确定性算法——对于同一输入而言,算法每一时刻下一计算步骤都是唯一确定的。
随机算法——对同一输入而言,每一时刻算法下一计算步骤可能依一个随机数来定。
2.一个算法的计算时间如何度量?算法的计算时间依赖于诸多因素:输入、计算机、程序设计语言、算法的实现…但是有些因素的影响是有限的并且也是可控的。
算法的计算时间可以简化为仅仅依赖于算法本身和输入大小。
计算时间是用运算步骤而不是具体时间来度量。
3.计算模型寄存器机(Register Machine),即随机存取机(Random Access Machine).对数成本模型(Logarithmic Cost Model)——认为在数n上的算术运算的成本为O(log n)。
密码学的计算复杂性理论
从前,有一个酷爱数学的年轻国王向邻国一位聪明美丽的公主求婚。 公主出了这样一道题:求出48 770 428 433 377 171的一个真因子。若国王 能在一天之内求出答案,公主便接受他的求婚。国王回去后立即开始逐个 数地进行计算,他从早到晚,共算了三万多个数,最终还是没有结果。国 王向公主求情,公主将答案相告:223 092 827是它的一个真因子。国王很 快就验证了这个数确能除尽48 770 428 433 377 171。公主说:“我再给你 一次机会,如果还求不出,将来你只好做我的证婚人了。”国王立即回国, 并向时任宰相的大数学家求教,大数学家在仔细地思考后认为这个数为17 位,则最小的一个真因子不会超过9位,于是他给国王出了一个主意:按自 然数的顺序给全国的老百姓每人编一个号发下去,等公主给出数目后,立 即将它们通报全国,让每个老百姓用自己的编号去除这个数,除尽了立即 上报,赏金万两。最后,国王用这个办法求婚成功。
– 当将一个问题分解到多个处理器上解决时,由于算法中不可避 免地存在必须串行执行的操作,从而大大地限制了并行计算机 系统的加速能力。
•设f为求解某个问题的计算存在的必须串行执行的操作占整 个最计大算 的的 加百 速分 能比 力,,则p为处理器的数目,Sp为并行计算机系统
设f=1%,p→,则Sp=100。(阿达尔定律) 串行执行操作仅占全部操作1%,解题速度最多也只能提高 一百倍。 对难解性问题而言,提高计算机系统的速度是远远不够的, 而降低算法复杂度的数量级才是最关键的问题。
读写头
状态 控制器 q
图灵在1936年提出了著名的图灵机模型(计算模型): ▪图灵机由一个无限长的带子(被划分成均匀的方格) 、一个磁带读/写头 和一个有限状态控制器组成。 ▪在每一步计算中,图灵机从磁带上读出一个符号,并由有限状态控制器决 定是否在当前的磁带区上写入不同的符号,然后决定是否需要将磁带读/写 头向前或向后移动一位。 当前的计算机,在理论上都是可以被图灵机模拟的,其原理和图灵机是相同 的,甚至还包含了存储程序的思想。
计算理论计算复杂性ppt课件
3cnf: 每个子句文字数不大于3, 2cnf: 每个子句文字数不大于2
可满足问题SAT
• 可满足性问题: SAT = { <> | 是可满足的布尔公式 }
• 思想: 将字符串对应到布尔公式 利用接受的形式定义.
• 过程: 任取ANP, 设N是A的nk时间NTM. w(|w|=n), N接受w
N有长度小于nk的接受格局序列 能填好N在w上的画面(一个nknk表格) f(w)可满足 • 结论: SAT是NP完全的
N接受w能填好N在w上的画面
# q0 w0 w1 … wn #
2)若0,1都在带上,重复以下步骤. O(n)
3) 检查带上0,1总数的奇偶性,
若是奇数,就拒绝.
O(n) log n
4) 再次扫描带,
第1个0开始,隔1个0删除1个0; O(n)
第1个1开始,隔1个1删除1个1.
总时间:
5)若带上同时没有0和1,则接受. O(n) O(nlogn)
否则拒绝.”
{0k1k|k0}TIME(nlogn)
快速验证
HP = {<G,s,t>|G是包含从s到t的 哈密顿路径的有向图}
CLIQUE={<G,k>|G是有k团的无向图} 目前没有快速算法,但其成员是可以快速验证的. 注意:HP的补可能不是可以快速验证的. 快速验证的特点: 1. 只需要对语言中的串能快速验证. 2. 验证需要借助额外的信息:证书,身份证.
• 二元可满足性问题: 2SAT = { <> | 是可满足的2cnf }
计算复杂性理论总结报告
计算复杂性理论总结报告(总10页)--本页仅作为文档封面,使用时请直接删除即可----内页可以根据需求调整合适字体及大小--计算复杂性理论总结报告一、图灵机(1)图灵机基本模型图灵机是由图灵(Alan Mathisom Turing)在1936年提出的,它是一个通用的计算模型。
通过图灵机,来研究递归可枚举集和部分递归函数,对算法和可计算性进行研究提供了形式化描述工具。
图灵机的基本模型包括一个有穷控制器,一条含有无数个带方格的输入带和一个读写头。
其直观物理模型如下图1所示。
基本图灵动作有以下三种:(1)改写被扫描带方格内容,控制器转化为下一状态。
(2)读写头向左移一个带方格,控制器转化为下一状态。
(3)读写头向左移一个带方格,控制器转化为下一状态。
图1图灵机(2)图灵机形式化定义,图灵机演算过程及语言描述定义:一个基本图灵机定义为一个七元组 TM={Q,C,δ,A,B,q1,F}。
其中Q是状态集合,(图灵机所有的状态)非空有限集;C是带符号表,(放在带方格中的符号集合)非空集;δ是控制函数或过程转换函数(定义控制器)δ:QxC QxC∪(R,L);A是输入字母表,A⊆C;B是空白符,B∈C;q1是初始状态,q1∈Q;F是终态集,F ⊆Q.TM的扫描符号串主要由δ来确定:(1)δ(q,s)=(q’,s’);(2)δ(q,s)=(q’,R);(3)δ(q,s)=(q’,L);(4)δ(q,s)无效,对应无定义时图灵机终止。
TM的工作用“格局”的转换来描述。
格局:σ:a1a2a3…aj-1qajaj+1…其中q∈Q,ai∈C;(1)若δ(q,ai)无定义,称σ为停机格局;(2)若q∈F,称σ为接受格局;(3)若q为初始状态,称σ为初始格局;格局σ到格局τ的转换σ├mτ若成立σ=σ1├m1σ2├m2σ…3├Mσk 记为σ1├*σk (k>=0)(3)图灵机其他形式(1)五元机δ:QxC→QxCx{R,L}基本动作:qsq’s’即δ(q,s)=(q’,s’);qsq’L即δ(q,s)=(q’,L);qsq’R即δ(q,s)=(q’,R)。
计算复杂性理论
计算复杂性理论计算复杂性理论是理论计算机科学的分支学科,使用数学方法对计算中所需的各种资源的耗费作定量的分析,并研究各类问题之间在计算复杂程度上的相互关系和基本性质,是算法分析的理论基础。
计算模型与计算资源计算复杂性理论的研究对象是算法在执行时所需的计算资源,而为了讨论这一点,我们必须假设算法是在某个计算模型上运行的。
常讨论的计算模型包括图灵机(Turing machine)和电路(circuit),它们分别是一致性(uniform)和非一致性(non-uniform)计算模型的代表。
而计算资源与计算模型是相关的,如对图灵机我们一般讨论的是时间、空间和随机源,而对电路我们一般讨论电路的大小。
由邱奇-图灵论题(Church-Turing thesis),所有的一致的计算模型与图灵机在多项式时间意义下是等价的。
而由于我们一般将多项式时间作为有效算法的标志,该论题使得我们可以仅仅关注图灵机而忽略其它的计算模型。
判定型问题和可计算性我们考虑对一个算法问题,什么样的回答是我们所需要的。
比如搜索问题:给定数组A,和一个数s,我们要问s在不在A中(判定性问题,decision problem)。
而进一步的,s如果在A中的话,s的位置是什么(搜索型问题,search problem)。
再比如完美匹配问题(perfect matching):给定一个二分图G=(V,E),我们问是不是存在边集E,使得二分图中每个结点恰好属于该边集的一条边(判定型问题)。
而进一步的,E存在的话,E具体是什么(搜索型问题)。
自然的,我们会发现对于一般的算法问题A,我们都可以这样来问:首先,解是不是存在的?其次,如果解存在,这个解具体是什么?这就是A的判定型问题和A的搜索型问题(又称函数型问题)区分来源的直观解释。
对判定型问题的回答只需是“是”或“否”,而对搜索型问题,需要返回解的具体形式或者“解不存在”。
所以一个对A 的搜索型问题的算法自然的也是对A的判定型问题的算法。
代数方程和数值计算的复杂性理论简介
电子科技大学计算机学院 顾小丰
54 - 6
计算的复杂性
第一章 代数方程和数值计算的复杂性理论简介
不动点迭代法
代数方程都可以表示成
f(x)=a0xn+a1xn-1+a2xn-2+·· n-1x+an=0,a0≠0 ·+a
这里f(x)是一个n次多项式。如果能够把方程 f(x)=0
改写成
2013年7月30日
电子科技大学计算机学院 顾小丰
54 - 8
计算的复杂性
第一章 代数方程和数值计算的复杂性理论简介
不动点迭代法
从上面可以看出,把代数方程改写成不动点方程是容易的,难的是怎 样得到不动点x*。为此,我们采用迭代方法:找一个点,记作x0 , 代入函数φ,得到φ(x0),记作x1,再代入函数φ,得到φ(x1),记作x2 ,·,如此一直做下去,可以得到一个序列 · · x0, x1, x2, ·, xn, · · · · · 其迭代关系可以表示成 xn+1=φ(xn),n=0,1,2,· · · 有趣的是,这个迭代序列有时候可以帮助我们找到所要的不动点,这 就是不动点迭代方法。
2013年7月30日
电子科技大学计算机学院 顾小丰
54 - 14
计算的复杂性
第一章 代数方程和数值计算的复杂性理论简介
为此,我们做3个迭代,数据如下:
n 0 1 2 3 4 5 6 xn -2.1 -2.2847653 -3.5446962 -32.801317 -2233620.6 xn 1.9 1.5741759 0.6862608 0.1266060 0.1176489 0.1176483 0.1176483 xn 2.1 2.5200594 6.0963224 495.44315
计算机算法复杂性理论
计算机算法复杂性理论计算机算法复杂性理论是计算机科学的重要分支之一,着重研究算法在解决问题时所需的计算资源的使用情况。
通过对算法的复杂性进行分析,可以评估算法解决实际问题的效率和可行性,并提供指导原则来选择合适的算法。
一、算法复杂性的定义和表达方式算法复杂性理论主要关注算法在最坏情况下的行为,而不是其平均行为。
为了研究算法的复杂性,一般采用大O表示法来表示算法的运行时间或空间消耗。
大O表示法给出了算法运行时间或空间消耗与问题规模的增长趋势。
例如,如果一个算法的运行时间为O(n),表示算法的运行时间随问题规模的增加而线性增长。
二、算法复杂性的分类常见的算法复杂性分类包括时间复杂性和空间复杂性。
1. 时间复杂性时间复杂性是衡量算法运行时间消耗的指标。
常见的时间复杂性包括:- O(1):常数时间复杂性,表示算法的运行时间不随问题规模的增加而增加。
- O(log n):对数时间复杂性,表示算法的运行时间随问题规模的增加而增加,但增长速度相对较慢。
- O(n):线性时间复杂性,表示算法的运行时间随问题规模的增加成线性增长。
- O(nlog n):线性对数时间复杂性,表示算法的运行时间随问题规模的增加成线性对数增长。
- O(n^k):多项式时间复杂性,表示算法的运行时间随问题规模的增加成多项式增长。
- O(2^n):指数时间复杂性,表示算法的运行时间随问题规模的增加成指数增长。
2. 空间复杂性空间复杂性是衡量算法空间资源消耗的指标。
常见的空间复杂性与时间复杂性类似,也使用大O表示法来表示。
三、算法复杂性的分析方法算法的复杂性分析可以通过以下几种方法进行。
1. 渐进分析渐进分析是最常用的算法复杂性分析方法,通过关注算法在问题规模无限增长时的行为来评估其复杂性。
渐进分析的关键是确定算法运行时间或空间消耗的增长趋势。
2. 最坏情况分析最坏情况分析是一种悲观的算法复杂性评估方法,认为算法在最坏情况下的表现是最能代表其复杂性的。
计算复杂性
巡回和周相
在上面提到的模型中,有的是串行模型,有的则是并行模型。如前所述,并行模型的串行时间相当于计算过 程中的总运算量。至于串行模型的并行时间,可以认为它是一个叫作巡回的量。简而言之,巡回是计算过程中周 相的总数。而周相则是计算过程中的一个阶段,在此阶段内写入工作空间的信息不会在同一阶段中读出。由此可 见,串行模型的巡回相应于并行模型的并行时间。对于一个问题类而言,存在一个高速并行算法的充要条件是可 以找到一个具有小的巡回数的串行算法。
问题的大小和复杂性的度量
和可计算性一样,复杂性总是对于一个特定的问题类来讨论的,它包括无穷多个个别问题,有大有小。例如, 对矩阵乘法这样一个问题类,相对地说,100阶矩阵相乘是个大问题,而二阶矩阵相乘就是个小问题。可以把矩 阵的阶 n作为衡量问题大小的尺度。又如在图论问题中,可以把图的顶点数 n作为衡量问题大小的尺度。一个个 别问题在计算之前,总要用某种方式加以编码,这个编码的长度 n就是衡量问题大小的尺度。当给定一个算法以 后,计算大小为 n。的问题所需要的时间、空间等就可以表示为 n的函数。这个函数就可作为该算法的时间或空 间复杂性的度量。严格地讲,是这个特定的问题类在某一特定计算模型中某一特定算法的复杂性之度量。当要解 决的问题越来越大时,时间、空间等资源耗费将以什么样的速率增长,即当 n趋向于无穷大时,这个函数的性状 如何,增长的阶是什么,这就是计算复杂性理论所要研究的主要问题。
资源计算时间、存储大小都称为资源。严格地讲,每一种资源的定义都依赖于特定的计算模型。对各种计算 模型,资源的定义虽不一样,但主要的可分为三类:
①串行时间(简称时间):它是计算过程中的总运算量,即把计算分成一些原始的步骤,完成这些步骤所需 要的总时间。
②空间:它是为了保存中间结果所需要的存储器的大小。
算法分析与计算复杂性理论-38页PPT资料
*5. Limits to Parallel Computation: P- Completeness Theory, Raymond Greenlaw, H. James Hoover, Walter L. Ruzzo, Oxford University Press, 2019.
10
其他问题
搜索问题 输入:排好序的数组 L,x 输出:x 是否在 L 中?如果在输出它的下标
排序问题 输入:n个数 输出:按递增顺序排好的n个数
选择问题 输入:n个数的集合S,正整数k(1kn) 输出:S中第 k 小的数
需要: 现有的算法中哪个算法最好? 是否存在更有效的算法?
11
Algorithm + Data Structure = Programming
算法设计分析与计算复杂性理论的研究是计算机科学技术 的核心研究领域 1966-2019期间,Turing奖获奖50人,其中10人以算法 设计,7人以计算理论、自动机和复杂性研究领域的杰 出贡献获奖 计算复杂性理论的核心课题 “P=NP?” 是本世纪7个最 重要的数学问题之一
通过算法设计与分析课程的训练对提高学生的素质和分析 问题解决问题的能力有着重要的作用
好的算法
提高求解问题的效率 节省存储空间
需要解决的问题
问题寻找求解算法 算法算法的评价 算法类问题复杂度的评价 问题类能够求解的边界
算法设计技术 算法分析技术 问题复杂性分析 计算复杂性理论
12
算法研究的重要性
算法设计与分析技术在计算机科学与技术领域有着重要的 应用背景
术语和概念
问题 算法 算法的时间复杂度 函数的阶 多项式时间的算法与指数时间的算法 问题的复杂度分析
3 计算复杂性理论
计算复杂性理论(Computational complexity theory)是计算理论的一部分,研究计算问题时所需的资源,比如时间和空间,以及如何尽可能的节省这些资源。
目录[隐藏]• 1 简介• 2 历史• 3 基本概念和工具o 3.1 计算模型与计算资源o 3.2 判定性问题和可计算性o 3.3 算法分析o 3.4 复杂性类o 3.5 归约• 4 NP与P关系问题及相关理论o 4.1 NP和P的定义o 4.2 NP与P关系问题o 4.3 NP完备理论o 4.4 电路复杂性o 4.5 其它NP与P关系问题相关的理论• 5 理论与实践• 6 参考•7 外部链接[编辑]简介计算复杂性理论所研究的资源中最常见的是时间(要通过多少步才能解决问题)和空间(在解决问题时需要多少内存)。
其他资源亦可考虑,例如在并行计算中,需要多少并行处理器才能解决问题。
时间复杂度是指在计算机科学与工程领域完成一个算法所需要的时间,是衡量一个算法优劣的重要参数。
时间复杂度越小,说明该算法效率越高,则该算法越有价值。
空间复杂度是指计算机科学领域完成一个算法所需要占用的存储空间,一般是输入参数的函数。
它是算法优劣的重要度量指标,一般来说,空间复杂度越小,算法越好。
我们假设有一个图灵机来解决某一类语言的某一问题,设有X个字(word)属于这个问题,把X放入这个图灵机的输入端,这个图灵机为解决此问题所需要的工作带格子数总和称为空间。
复杂度理论和可计算性理论不同,可计算性理论的重心在于问题能否解决,不管需要多少资源。
而复杂性理论作为计算理论的分支,某种程度上被认为和算法理论是一种“矛”与“盾”的关系,即算法理论专注于设计有效的算法,而复杂性理论专注于理解为什么对于某类问题,不存在有效的算法。
[编辑]历史在20世纪50年代,Trahtenbrot和Rabin的论文被认为是该领域最早的文献。
而一般说来,被公认为奠定了计算复杂性领域基础的是Hartmanis和Stearns的1960年代的论文On the computational complexity of algorithms。
第一讲计算复杂性理论精品PPT课件
演讲人:XXXXXX 时 间:XX年XX月XX日
计算量的表示法: 上界值表示法
O記号:(Big O Notation)
•定義: O(f(n)) 读作order f(n), 或阶 f(n)
即: g(n)=O(f(n))
–表示对于任意定数c 和 m,以及对所有 n>m, 有下式成立:
g(n)< cf(n)
计算量的表示法——例
n2+1000n→O(n2)
第一讲: 计算复杂性理论 (Complexity Theory)
计算量的概念 计算量的表示 算法与计算量 计算复杂性 影响计算复杂性的因素
优化问题及其计算的复杂性
例:
组合优化问题:
1 3 9
2 4 0
3 5 1
4 6 2
5 7 3
組合数虽然有限,但因其数量太多,寻找最优解很难。
背包问题(knapsack problem):
计算量的膨胀(1)
10行×10列棋盘上米粒的数量
(第1格内放1粒米,以后每格顺次增加1倍……)
格序号
米粒数
重量 (kg)
1
1
2.0×10-5
9
256
5.1×10-3
18
131072
2.6×100
27
67108864
1.3×103
36
34359738368
6.9 ×105
45
17592186044416
計算量(2)
{a1, a2,..., an}:n個整数
Q1. 求和(1): a1+a2+・・・+an. n-1 steps → O(n)算法.
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第三章计算复杂性理论主要内容3.1 Turing机3.2 计算复杂性理论3.3 NP完全性理论的基本概念3.4 NP完全性证明3.5 用NP完全性理论分析问题3.6 NP难度3.1 Turing机一、Turing机的定义1. 基本模型2. 基本Turing机的变种单向带的Turing机k条带的Turing机非确定型的Turing机二、Turing机模型的等价性1. 单向带Turing机与基本Turing机等价2. k条带的Turing机与基本Turing机等价3. 非确定型Turing机与基本Turing机等价一、Turing机的定义1. 基本模型双向无限带的Turing机M = <Q,∑,Γ,δ,q,B,F>, 其中Q 有穷状态集Γ有穷带字符集∑输入字符集∑⊂ΓB 空白字符, B∈Γ-∑q 0初始状态, q∈QF 终结状态集, F⊂Q,qY ,qN∈Fδ: (Q-F)×Γ→Q×Γ×{L,R} 状态转移函数(ID)α1qα2表示此刻Turing机的FSC处于状态q,读写头指在串α2的第一个字符.例如Turing机M的某时刻的状态转移函数是δ(q,xi) = (p,Y,L)带上的字符串为x1x2...xi...xn, 读写头指向字符xi, 则它的瞬间描述是:x 1x2...xi-1qxi...xn┣x1x2...x i-2px i-1Yx i+1...x n ┣表示由左边的ID一步达到右边的ID┣*表示由左边的ID经有限步达到右边的ID被M接受的语言记作L(M),是∑*上的字的集合.当这些字左端对齐方格1放在带上,M处于状态q,M的带头指向方格1时, 经过有限步M将停机在接受状态qY, 即L(M)={ω|ω∈∑*,∃α1,α2∈Γ*(qω⊢*α1qYα2)}如果字ω不是L(M)中的字, M可以不停机或停机在拒斥状态qN.例1 L={0n1n|n≥1}, 设计接受L的Turing机如下: M = <Q,∑,Γ,δ,q,F>Q = {q0,q1,q2,q3,qY},∑= {0,1},Γ= {0,1,X,Y,B},F = {qY }. 其中qY代表接受停机状态.初始将字符串放在从1到n方格中, FSC处在状态q, 读写头指向方格1.将第一个0改写成X, 然后带头向右扫描. 遇到第一个1, 将1改为Y, 然后带头向左扫描. 遇到第一个X改为向右扫描. 这时进入下一个巡回.每个巡回将一对0和1改为X和Y, 直到接受或拒斥停机.例如输入0011,Turing 机动作如下:q 00011┣Xq 1011┣X0q 111┣Xq 20Y1┣q 2X0Y1┣Xq 00Y1 ┣XXq 1Y1┣XXYq 11┣XXq 2YY ┣Xq 2XYY ┣XXq 0YY ┣XXYq 3Y ┣XXYYq 3┣XXYYq Y转移函数如下(其中__代表拒斥停机状态)1X Y B q 0(q 1,X,R)____(q 3,Y,R)__q 1(q 1,0,R)(q 2,Y,L)__(q 1,Y,R)__q 2(q 2,0,L)__(q 0,X,R)(q 2,Y,L)__q 3______(q 3,Y,R)q Y2.基本Turing机的变种单向无限带的Turing机带方格从1开始, 向右无限长. 其它与基本Turing机相同.多带的Turing机k条双向带, k个读写头, 其中k为大于1的常数. 初始将输入写在第一条带的方格1到n内. 其它带为空. 每个读写头扫描一条带,可以改写被扫描方格的字符, 读写头然后向左或向右移动一个方格. 读写头的动作由FSC的状态及k条带所扫描的k个字符来决定.非确定型的Turing机(NDTM)一个有限状态控制器FSC, 猜想模块GM, 读写头, 只写头, 双向无限带.状态, 带方格的1到n写上输入x, 初始FSC处于q其它方格为空白字符B. 读写头指在方格1, 只写头指在方格-1.计算分为猜想阶段和检查阶段.猜想阶段状态下的待用状态.FSC处于q猜想模块GM指挥只写头,每次一步在所扫描的方格内写下 中的某个字符, 然后左移一个方格或不动.到某个时刻, 猜想模块进入待用状态, 这时有限状状态下的活跃状态. 从此刻起, 计算进态控制器进入q入检查阶段,而猜想模块是否继续动作, 或怎样动作, 完全是任意的.检查阶段与确定型的Turing机完全一样. 如果FSC进入接受状态, 则计算停止, 接受x. 如果进入拒斥状态, 则计算停止, 不接受x.二、Turng机的等价性定理1 语言L被一个具有双向无限带的Turing机M2接受当且仅当L被一个具有单向无限带的Turing机M1接受.定理2 语言L被一个k条无限带的Turing机M1接受当且仅当L被一个双向无限带的Turing机M2接受.定理3 语言L被一个非确定型的Turing机M1接受当且仅当L被一个确定型的Turing机M2接受.3.2 计算复杂性的基本概念一、空间和时间复杂性的形式定义1.确定型Turing机空间复杂性:离线的Turing机M,1条具有端记号的只读输入带,k条半无限存储带.如果对每个长为n的输入串, M在任一条存储带上都至多扫视S(n)个单元, 那么称M在最坏情况下的空间复杂度为S(n).时间复杂性:k条带的Turing机M, M有k条双向带, 一条带包含输入.如果对于每个长为n的输入串, M在停机前至多做T(n) 个动作, 那么称M在最坏情况下的时间复杂度为T(n).两条假设:空间复杂性至少需要1, 时间复杂性至少需要读入输入的时间, 因此这里作如下假定:对一切n,S(n)≥1,logn 是max{1,⎡logn⎤}的缩写.对一切n,T(n)≥n+1, T(n)是max{n+1,T(n)}的缩写.例1 L = {wcw R| w为0-1字符串},设计接受L的Turing机M1和M2, 使得M1的时间复杂度为O(n), M2的空间复杂度为O(log n).M1有2条带,把c左边的w复制到第2条带上. 当发现c时第2条带的读写头向左, 输入带的读写头向右. 比较两个带头的符号, 如果符号一样, 字符个数一样, M1接受x. M1至多作n+1个动作. 时间复杂度为n+1. 空间复杂度为⎡n-1/2⎤+1.M2有2条带, 第2条带作为二进制的计数器. 首先检查输入是否只有1个c, 以及c左边和右边的符号是否一样多. 然后逐个比较c左边和右边的字符, 用上述计数器找到对应的字符. 如果所有的字符都一样, M2接受停机. 空间复杂度为二进制的计数器的占用空间, 即O(log n). 时间复杂度为n2.2. 非确定型Turing机给定串x, M接受x的时间: M关于x的所有接受计算中, 在猜想阶段和检查阶段直到进入接受停机状态为止所发生步数的最小值.M的最坏情况下的时间复杂性T(n)=max{m|存在x∈L,|x|=n,M接受x的时间为m}给定串x, M接受x的空间: M关于x的所有接受计算中, 在猜想阶段和检查阶段直到进入接受停机状态为止在存储带上扫视的最少单元数.M的最坏情况下的空间复杂性S(n)=max{m|存在x∈L,|x|=n, M接受x的空间为m}二、带压缩、线性加速和带数目的减少带压缩:由于Turing机的状态数和带字符集的大小可以是任意给定的常数. 可以将若干个带字符编码成一个字符, 所以空间占用量总可以压缩一个常数因子.线性加速:使得计算加速一个常数因子.带数目的减少:在空间或时间复杂性不变的情况下减少带的数目.这里对Turing机进行一点修改, 允许带头原地不动.1. 带压缩(使用空间长度的线性减少)定理1 如果语言L 被一个具有k 条存储带S(n)空间有界的Turing 机(TM)接受, 则对任意1>c>0, L 被一个cS(n) 空间有界的TM 接受.2. 时间线性加速∞=∞→nn T Inf n )(那么,L 就可以被一个k 带cT(n)时间有界的TM M 2接受, 其中c 是大于0的任意常数.定理2 如果语言L 被一个k 带T(n)时间有界的TM M 1接受,那么只要k>1, 且定理3如果对于k>1和某个常数c>1, L被一个k带cn时间有界的TM接受, 则对于每个ε>0, L被一个k带(1+ε)n 时间有界的TM接受.推论1如果对于某个c>1,T(n)=cn, 则对任何ε>0,DTIME(T(n))= DTIME((1+ε)n)推论2如果对于某个c>1,T(n)=cn, 则对任何ε>0, NTIME(T(n)) = NTIME((1+ε)n)3. 带数目的减少(空间不增加下带数目的减少)定理4 如果语言L被一个具有k条存储带S(n)空间有界的TM接受, 那么L可以被一个具有1条存储带的S(n)空间有界的TM接受.4. 时间复杂性与带数目的减少定理5如果L在DTIME(T(n))中, 那么L可被一个单带TM在时间T2(n)内被接受.推论L在NTIME(T(n))中, 则L可以被一个非确定型T2(n)时间有界的TM接受.定理6如果L可以被一个k带T(n)时间有界的TM 接受, 则L可以被一个2带TM在T(n)logT(n) 时间内接受.推论如果L被一个k条带T(n)时间有界的NDTM接受, 则L也可以被一个双带T(n)logT(n) 时间有界的NDTM接受.小结:减少带数目,可以保证空间复杂性不变.减少带数目,时间复杂性增加.小结:1. 带压缩(空间的线性减少)M1: k 条存储带, S(n)空间存在M2: k 条存储带,cS(n)空间,1>c>02. 时间线性加速(时间的线性减少)(1)M1: k 带(k>1),T(n)时间()存在M2: k 带(k>1),cT(n)时间,1>c>0(2)M1: k 带(k>1),cn 时间,c>1存在M2: k 带(k>1),(1+ε)n 时间,任给ε>03. 带数目的减少(1)M1: k 带(k>1), S(n)空间,存在M2:单带, S(n)空间(2)M1: k 带(k>1), T(n)时间存在M2:单带, T 2(n)时间存在M2: 2带,T(n)logT(n)时间∞=∞→n n T Inf n )(3.3 NP完全理论的基本概念主要内容一、判定问题和语言判定问题定义与描述判定问题与语言的关系二、P类与NP类难解的问题与多项式可解的问题P类与NP类定义三、多项式变换与NP完全性多项式变换的定义及性质NP完全的定义四、Cook定理证明了第一个NP完全问题(SAT)一、判定问题和语言主要内容1. 判定问题的定义2. 陈述判定问题的标准格式3. 引入判定问题的理由4. 判定问题的形式描述——语言5. 算法的形式描述——Turing机1. 判定问题的定义一个判定问题π= (Dπ,Yπ), 其中Dπ为实例集, Yπ⊆Dπ为肯定实例的集合. 任给实例I∈Dπ, 问I∈Yπ?2. 陈述一个判定问题的标准格式对实例中参数的一般描述和一个肯定--否定问题.子图同构问题实例: 两个图G1=(V1,E1), G2=(V2,E2)问: G1是否包含与G2同构的子图?即是否存在子集V’⊆V1, E’⊆E1使得|V’|=|V2|,|E’|=|E2|,且有双射f: V2→V’满足以下条件?{u,v}∈E2⇔{f(u),f(v)}∈E’3. 引入判定问题的理由(1) 判定问题的形式化描述简单.(2) 许多优化问题的难度与判定问题的难度相关.例如巡回售货员问题是一个优化问题. 如果在实例中加上参数B, 问是否存在长度不超过B的旅行? 得到一个巡回售货员的判定问题. 可以如下给出解该判定问题的算法:I. 先解对应的优化问题得到最优解, 时间为f(n)II.计算最优解的成本函数(旅行长度), 然后和B比较. 如果大于B,则回答No;否则回答Yes. 所用时间为g(n)g(n)为多项式时间,因此解巡回售货员判定问题的时间由f(n)确定. 如果对于巡回售货员优化问题存在多项式时间的算法, 那么也存在解相应判定问题的多项式算法.4. 判定问题的形式描述--语言语言的定义设∑为有穷字符集, ∑*是∑上所用有穷字符串的集合. 称∑*的任何子集为∑上的语言.判定问题与语言的关系在合理的编码系统e下, 判定问题的任意实例被编码成一个字符串x.例如巡回售货员的判定问题的实例如下图相应的字符串是:∑= {c,[,],/,0,1,2,3,4,5,6,7,8,9,#}c[1]c[2]c[3]c[4]//10/5/9//6/9//3#25编码系统e将∑*中的字符串划分成三类:不是实例中的编码Dπ-Yπ中的实例的编码Yπ中的实例的编码只有Yπ中的实例的编码构成与判定问题π对应的语言L.具体定义如下:与判定问题π和编码系统e相关的语言L[π,e]设π为判定问题, e是关于π的编码系统, 其字符表为∑, 则L[π,e]={x∈∑*: x是某个实例I∈Yπ在e下的编码}I∈Yπ⇔x∈L[π,e]算法解判定问题π⇔用Turing机识别语言L[π,e]说明:对判定问题π, 相关的L[π,e]与编码系统有关.合理的编码系统:无冗余的符号和信息.数字用二进制(或其他进制,不允许用一进制)表示.可译码在不同的合理的编码系统下, 实例的编码所对应的输入长度length: Dπ→Z+多项式相关. 换句话说, e,e’为合理的编码系统, 实例I在e和e’下的编码所对应的输入长度分别为length[I] 和length’[I], 则存在多项式P和P’使得length’[I]≤P(length[I]), length[I]≤P’(length’[I])二、P类与NP类1. 难解的问题定义实例2. P类与NP类的定义非形式定义(问题类)形式定义(语言类)3. P类与NP类的关系P NPP=NP?1.难解的问题不存在确定型多项式时间算法的问题难解的原因问题太难, 在多项式时间不可能找到解解本身太庞大, 表示解的符号串长度不是输入长度的多项式函数一般只考虑第一种难解的问题两类难解的问题不可判定问题——不存在算法可判定的难解问题——有算法,但不存在多项式时间的算法停机问题是不可判定的定理1 不存在根据任意Turing机T的定义, 能够确定T在输入d上是否停机的算法.T证明思路:证明T在输入T上停机是不可判定的反证法:假设存在Turing机H,可以对任何Turing机T,判定T在T上是否停机.根据H,构造Turing机L,使得L在L上停机⇒L在L上不停机L在L上不停机⇒L在L上停机证假定H是一个可以判定T在T上是否停机的Turing机. H有两个停机状态:Yes停机状态⇔T在T上停机No 停机状态⇔T在T上不停机构造新的Turing机L. L比H多两个新的状态q1’, q2’.H进入Yes停机状态当且仅当L转移到q1’. 并且设定转移函数, 对一切u∈∑有δ(q1’,u) = (q2’,u,R),δ(q2’,u) = (q1’,u,L)H进入No停机状态, L也进入No停机状态. 从而有T在T上停机⇔L在T上不停机T在T上不停机⇔L在T上停机令T=L, 则导致L在L停机⇔L在L上不停机L在L不停机⇔L在L上停机产生矛盾.可判定的难解问题实例:非确定型的难解问题(用非确定型的Turing机在多项式时间不可能解出)判定半扩展正则表达式是否表示它的字母表上的所有的串. The Design and Analysis of Computer Algorithms, Aho, Hopcroft, Ullman. 1972.NP类问题是判定问题用非确定型的算法在多项式时间可解到目前还没有找到多项式时间的确定型算法是否为难解的问题(不清楚)2. P类和NP类的定义(1) 非形式的定义P类: 用确定型算法在多项式时间可解的判定问题类NP类: 用非确定型算法在多项式时间可解的判定问题类非确定型算法求解判定问题π任意给定实例I∈Dπ, 如果I∈Yπ, 则存在结构s,使得当对输入I猜想s时,检查阶段回答Yes; 如果I∉Yπ, 则不存在结构s,使得当对输入I猜想s时,检查阶段回答Yes.多项式时间的非确定型算法对于解判定问题非确定型算法, 如果存在多项式P,对每个实例I∈Yπ存在猜想s,使得检查阶段在时间P(length[I])内回答Yes.几点说明:1. 猜想的结构s的规模小于P(length[I])2. 对肯定实例I∈Yπ,至少存在一个猜想s,使得检查阶段在时间P(length[I])内回答Yes,而不管其他猜想.3. 对否定实例I∈Dπ-Yπ的运算可以不管.4. 可以看成具有无限并行能力的计算机. 将所有可能的结构猜想出来, 每个结构一道, 如果有一个回答Yes, 则整个机器停机并回答Yes; 使得机器回答Yes的最短时间就是计算时间.5. 肯定与否定是不对称的肯定与否定不对称.问题π与π的补问题πc.π: 对于给定的实例I,X是否成立?πc: 对于给定的实例I,X是否不成立?Dπ=Dπc, Yπ=Dπc-Yπc, Yπc=Dπ-Yπ.π∈P ⇒πc∈Pπ∈NP ⇒πc∈NP? 不一定π∈P ⇔πc∈P证设M是解π的DTM程序, 则对任意I∈Dπ, M都停机. M有两个停机状态Yes和No. 设M’完全模拟M的动作, 只是交换两个停机状态.则M’是解πc的DTM程序, 因为M’停机No ⇔M停机Yes ⇔I∈Yπ⇔I∈Dπc-YπcM’停机Yes ⇔M停机No ⇔I∈Dπ-Yπ⇔I∈Yπc所以π∈P ⇒πc∈Pπc∈P ⇒π∈P.π∈NP ⇒πc∈NP ?π∈NP, 存在解π的非确定型算法. 要想得到解πc的非确定型算法必须对I∈Yπc的实例做猜想. 而I∈Dπ-Yπ⇔I∈Yπc,对于I,原来解π的非确定型算法可能根本不停机, 因此不能由这个解π的非确定型算法得到解πc的非确定型算法.(2) 形式描述}P={L:存在多项式时间的DTM程序M使得L=LM}NP={L:存在多项式时间的NDTM程序M使得L=LM非形式描述形式描述判定问题π语言L实例I∈Dπ符号串x肯定实例I∈Yπ符号串x∈LM实例规模符号串长度确定型算法对所有输入停机的DTM程序确定型算法对I回答Yes DTM程序对符号串x停机接受状态确定型算法求解判定问题πDTM程序识别语言L多项式时间的确定型算法多项式时间的DTM程序π∈P(问题类) L∈P (语言类)3. P与NP的关系P ⊆NPP = NP ?可以证明DTM模拟NDTM的时间为指数时间DTM模拟NDTM的时间复杂性的上界.定理2 P ⊆NP是多项式时间的识别L的DTM程序. 如证任取L属于P, 令M1.下构造识别L的NDTM程序M2对于给定的输入, 任意写下猜想串, 然后在检查阶段模拟M1的动作即可. 易见M是识别L的NDTM程序, 故L属于NP.2定理3 如果L∈NP, 那么存在多项式P使得L能用时间复杂性函数为O(2P(n)) 的DTM程序识别.证L∈NP, 存在识别L的NDTM程序M, 即存在多项式q, 对于任意x∈L,|x|=n, 都存在猜想串s, |s|≤q(n), M对x和s 的计算在q(n)步停机yes.长度不超过q(n)的猜想串, 至多有K q(n)个, K=|Γ|.如下构造DTM程序M’: 依次写下所有长度不超过q(n)的猜想串s, 对输入x和s使用M的检查阶段的动作进行计算. 如果对某个猜想串s, M在q(n)步内停机Yes, 则M’停机Yes; 如果M对所有的猜想串在q(n)步或停机No,或不停机, 则M’停机No. 易见LM’= LM.考虑M’的时间复杂性. 对每个猜想串的计算时间至多为q(n), 对所有猜想串的计算时间至多为O(K q(n)q(n)) = O(2P(n))三、多项式变换和NP完全性1. 多项式变换的定义(1)非形式的定义设判定问题π1, π2, 若存在函数f: Dπ1→Dπ2满足I. f可以用确定型算法在多项式时间计算II. ∀I∈Dπ1, I∈Yπ1⇔f(I)∈Yπ2则称π1可多项式变换到π2, 记作π1∝π2.构造多项式变换的步骤:针对原来问题的参数给出变换规则f: Dπ1→Dπ2证明I∈Yπ1⇔f(I)∈Yπ2证明计算f的时间为多项式时间一个多项式变换的实例例HC αTSπ1: 哈密顿回路问题HCπ2: 巡回售货员问题TSHC 实例: 图G=(V,E), V={v1,v2, ...,vm}问: G中是否包含一条哈密顿回路?TS 实例:城市集合C={c1,c2,…,cm},正整数d(ci,cj),1≤i<j≤m,B为正整数问:是否存在一条长度不超过B的巡回路线?多项式变换 f 如下:令城市集合C=V. B=m.∀vi ,vj∈V (i≠j),⎩⎨⎧∉∈=EvvEvvvvdjijiji},{2},{1),(证明肯定实例当且仅当变换到肯定实例假设G存在一条HC <v1,v2,...,vm>, 则<v1,v2,...,vm> 也是f(G)中的旅行路线. 易见该旅行路线中的每条边长度都是1, 总长为m. 所以f(G)为TS的肯定实例.假设<v1,v2,...,vm>是f(G)中长度不超过m的旅行. 由于任何城市间的距离为1或2, 总共有m个距离, 因此每个距离必为1. 从而证明了G是HC的肯定实例.证明变换的时间为多项式时间计算d(vi ,vj), i j. 共计算m(m-1)/2次, 每次要检查{vi ,vj} 是否属于E (可以用邻接表进行). 显然是多项式时间.2)形式定义设∑1,∑2为字母表, L1⊆∑1*, L2⊆∑2* 是语言, 如果f: ∑1*→∑2*满足:I. 存在计算f的多项式时间的DTM程序II. ∀x∈∑1*, x∈L1⇔f(x)∈L2则称f是从L1到L2的多项式变换, 记作L1∝L2.所谓多项式时间的DTM程序M计算函数f : ∑*→Γ*是指:输入字符表为∑, 带字符表为Γ. M对∑*上的所有长度为n的字符串在n的多项式步内停机,且f对于任何x∈∑*, f(x)是输入x到M停机时带方格1到最右边的非空白方格为止的符号串.若L1∝L2, L2∝L1, 则称L1与L2是多项式等价的.2. 多项式变换的性质(1)若L1∝L2, 则L2∈P ⇒L1∈P.(2)若L1∝L2, L2∝L3, 则L1∝L3.证明思路条件:多项式变换f⇒存在计算f的多项式时间的DTM程序L∈P ⇒存在识别L的多项式时间的DTM 程序结论:语言属于P方法——构造识别语言的多项式时间的DTM程序存在多项式变换方法——给出多项式变换证明:若L 1∝L 2, 则L 2∈P ⇒L 1∈P证设∑1,∑2是L 1和L 2的字符表,f: ∑1*→∑2*是从L 1到L 2的多项式变换, M f 是计算f 的多项式时间的DTM 程序, M 2是识别L 2的多项式时间的DTM 程序.如下构造识别L 1的多项式时间的DTM 程序M ’: M ’首先模拟M f ,对x ∈∑1*计算出f(x)∈∑2*. 接着模拟M 2,确定f(x)是否属于L 2.因为f 是多项式变换, 即x ∈L 1 ⇔f(x)∈L 2,所以M 2对f(x)停机q Y ⇔M ’对x 停机q Y从而证明M ’识别L 1.设M f ,M 2的时间复杂性函数分别为多项式P f ,P 2,则|f(x)|≤P f (|x|)从而M ’的时间复杂性为O(P f (|x|)+ P 2(P f (|x|)))即L 1∈P.2. NP完全性若L∈NP, 且对于任意语言L’∈NP 都有L’∝L, 则称L是NP完全的, 记作L∈NPC, 其中NPC 是NP完全的语言类.类似可以定义NPC 为NP完全的问题类.3. NP完全的性质(1)若L1,L2∈NP, L1∈NPC, 且L1∝L2, 则L2∈NPC.(2)若L∈NPC, 则L∈P ⇒P = NP.(3)若P ≠NP, 则NPC⋂P=∅.证明留作思考.四、Cook定理1. 可满足性问题(1) 几个概念布尔变量的集合: U={u1,u2,...,um},ui为布尔变量U上的文字: 对于u U, u或 称为U上的文字U上的子句c: U上若干文字的集合,表示这些文字的析取.例如{u1,u3,u5}表示u1+u3+u5U上的子句集C: U上的字句的集合,表示C中子句的合取.例如C={{u1,u3,ū5},{u2,u3,ū5},{u5}}表示(u1+u3+ū5)(u2+u3+ū5)(u5)U上的真值赋值:函数t: U→{T,F}t(u)=F, 称u是假值,t(u)=T, 称u是真值.易见t(u)=T ⇔t(ū)=Ft满足子句c: c中至少有一个文字在这个赋值t下取真值t满足子句集C: t满足集合C中的每个子句.(2)可满足性问题(SAT)实例: 布尔变量集合U以及U上的子句集C问: 是否存在满足C的真值赋值?Cook定理(1971) 可满足性问题SAT是NP完全的.证(1)SAT NP.如下设计解SAT的非确定型算法. 任意猜想一个关于U中变量的真值赋值, 然后检查这个赋值是否满足C中所有的子句。