计算理论基础
本部分将介绍基础的计算理论的知识。这部分内容在 OI 中作用不大(但还是略有作用:如果你遇到了一个 NP-hard 问题,你可以认为它是不存在多项式复杂度的解法的),可以作为兴趣了解,或者为以后的学习做准备。
本文中许多结论都是不加证明的,如果有兴趣的话可以自行查阅相关证明。
前置知识:时间复杂度。
问题
语言
一个 字母表(alphabet) 是一个非空有限集合,该集合中的元素称为 符号/字符(symbol)。
令
需要注意的是,这里的「语言」是一个抽象的概念,通常意义上的字符串是语言,所有的有向无环图也可以是一个语言(01 串与有向图之间可以建立双射,具体方式无需了解)。
由于任何语言都可以转化成 01 串的形式,所以在下文中不加说明时
判定问题
判定问题就是只能用 YES/NO 回答的问题,本质上是判定一个串是否属于一个语言,即:
判定问题由于其简洁性而常常被作为计算理论研究的对象。本文中不加说明时,「问题」都指「判定问题」,当然,有时一些命题也能简单地推广到其它问题上。
一个语言也可以代指「判定一个串是否属于这个语言」这个判定问题,因此,「语言」和「问题」可以视作同义词。
功能性问题
功能性问题的回答不止 YES/NO,可以是一个数或是其它。如,「求两个数的和」就是一个功能性问题。
任何功能性问题都可以转化为一个判定问题,如,「求两个数的和」可以转化为「判定两个数的和是否等于第三个数」。
判定问题也可以转化为一个功能性问题:求这个判定问题的指示函数,即上文中判定问题定义里的
图灵机
确定性图灵机
不加说明时,「图灵机」往往指「确定性图灵机」,本文中也是如此。
图灵机有很多不同的定义,这里选取其中一种,其它定义下的图灵机往往与下面这种定义的图灵机计算能力等价。
图灵机是一个在一条可双向无限延伸且被划分为若干格子的纸带上进行操作的机器,其有内部状态,还有一个可以在纸带上进行修改与移动的磁针。
正式地说,图灵机是一个七元组
是一个有限非空的 状态集合; 是一个有限非空的 磁带字母表; 是 空字符,它是唯一一个在计算过程中可以在磁带上无限频繁地出现的字符; 是 输入符号集,是可以出现在初始磁带(即输入)上的字符; 是 初始状态; 是 接受状态,如果一个图灵机在某个接受状态停机,则称初始磁带上的内容被这个图灵机 接受。 是一个被称作 转移函数 的 partial function(即只对定义域的一个子集有定义的函数)。如果 在当前状态下没有定义,则图灵机停机。
图灵机从初始状态与纸带起点起,每次根据当前的内部状态
其实,知道图灵机的工作细节是不必要的,只需建立直观理解即可。
图灵机
图灵机与冯·诺依曼计算机解决问题的时间复杂度差别在多项式级别内,所以研究复杂度类时可以使用图灵机作为计算模型。
非确定性图灵机
非确定型图灵机是图灵机的一种,它与确定型图灵机的不同在于:确定型图灵机的每一步只能转移到一个状态,而非确定型图灵机可以「同时」转移到多个状态,从而在多个「分支」并行计算,一旦这些「分支」中有一个在接受状态停机,则此非确定性图灵机接受这个输入。
事实上,任何确定型图灵机都可以用类似于迭代加深搜索的方式在指数级时间内模拟一台非确定型图灵机多项式时间内的行为。
在现实生活中,确定型图灵机相当于单核处理器,只支持串行处理;而非确定型图灵机相当于理想的多核处理器,支持无限大小的并行处理。
多带图灵机
标准的图灵机只能在一条纸带上进行操作,但为了方便,本文中研究多带图灵机。对于一个
多带图灵机的纸带数必须是有限的。
对于一个多带图灵机,它使用的空间是磁头在除输入带外的其它纸带上所访问过的单元格数目。
图灵机的编码
图灵机可以被自然数编码,即存在满射函数
记由自然数
通用图灵机
存在一台图灵机
- 若
在输入 下在有限时间内停机,则 ,否则 不会在有限时间内停机; - 如果对于任意
, 在输入 下在 时间内停机,则对于任意 , 在 时间内停机。
即:存在一台通用图灵机,它能模拟任何一台图灵机,且花费的时间只会比这台被模拟的图灵机慢其运行时间的对数。
可计算性
不可计算问题
对于一个判定问题,若存在一个总是在有限步内停机且能够正确进行判定的图灵机,则这个问题是一个 图灵可计算 的问题,否则这个问题是一个 图灵不可计算 的问题。
由于图灵机可以被自然数编码,所以图灵机的个数是可数无穷,而语言(即二进制串的集合)的个数是不可数无穷,而每个图灵机最多判定一个语言,所以一定存在图灵不可计算的问题。
停机问题
停机问题是一个经典的图灵不可计算问题:给定
停机问题是图灵不可计算的证明
定义函数
我们先证明
假设存在一台图灵机
令
由于
丘奇 - 图灵论题
丘奇 - 图灵论题称,若一类问题有一个有效的方法解决,则这类问题可以被某个图灵机解决。
其中,「有效的方法」需要满足:
- 包含有限条清晰的指令;
- 当用其解决这类问题的其中一个时,这个方法需要在有限步骤内结束,且得到正确的答案。
这个论题没有被证明,但其是计算理论的一条基本公理。
复杂度类
复杂度类有很多,本文只会介绍其中较为常见的一小部分。
R 和 RE
对于语言
对于语言
复杂度类
复杂度类
由定义可以得到
DTIME
如果存在一台确定性图灵机能够判定一个语言,且对于任何输入
P
复杂度类
线性规划、计算最大公约数、求图的最大匹配的判定版本都是
EXPTIME
复杂度类
停机问题的弱化版——给定一个图灵机的编码以及一个正整数
NTIME
如果存在一台非确定性图灵机能够判定一个语言,且对于任何输入
NP
复杂度类
所有
NP-hard
如果所有
换句话说,如果可以在一单位的时间内解决 NP-hard 的问题
NP-complete
如果一个问题既是
一些经典的 NPC 问题:旅行商问题的判定版本、最大独立集问题的判定版本、最小点覆盖问题的判定版本、最长路问题的判定版本、0-1 整数规划问题的判定版本、集合覆盖问题、图着色问题、背包问题、三维匹配问题、最大割问题的判定版本。
NPC 问题的功能性版本往往是 NP-hard 的,例如:「判定一张图中是否存在大小为
类似地,其它复杂度类也会有「XX-complete」,如所有
co-NP
一个问题是
例如:「给定
NP-intermediate
如果一个问题是
就人们目前的了解,图同构问题、离散对数问题和因数分解问题可能是 NP-intermediate 的。
Ladner 定理指出,如果
NEXPTIME
复杂度类
#P
求一张普通图或二分图的匹配或完美匹配个数都是 #P 完全的,对应的判定问题为「判定一张图是否存在(完美)匹配」。
DSPACE
如果存在一台确定性图灵机能够在输入为
,即正则语言,也就是自动机能够判定的语言。 ,需要注意的是图灵机使用的空间不包括输入占用的空间。
NSPACE
如果存在一台非确定性图灵机能够在输入为
,即上下文相关语言。
多项式时间
简单来说,如果存在正数
多项式时间可分为强多项式时间和弱多项式时间,除此之外还有伪多项式时间。
Strongly polynomial time 强多项式时间
我们先定义一个计算模型,称作算术模型。在算术模型中,数字之间的算术运算(加减乘除、比较大小)可以在单位时间内完成(即
如果一个算法在算术模型下的操作数是输入中的数字个数的多项式,并且空间复杂度是输入规模(而非数字个数)的多项式,则这个算法是 强多项式时间 的。由于算术操作在一般的计算模型下可以在输入规模(即数字大小的对数)的多项式时间内完成,强多项式时间的算法一定是多项式时间的。
一般来说,强多项式时间的算法的时间复杂度与值域无关。
Weakly polynomial time 弱多项式时间
如果一个算法是多项式时间的但不是强多项式时间的,则它是 弱多项式时间 的。
例如,计算最大公约数的欧几里得算法,时间复杂度为
Pseudo-polynomial time 伪多项式时间
如果一个算法的用时是值域的多项式,则称它是 伪多项式时间 的。伪多项式时间的算法可能是多项式时间的也可能不是,可能不是多项式时间是因为表示一个大小为
例如,背包问题是 NP-hard 问题,但它有基于动态规划的伪多项式时间的解法。
如果一个 NPC/NP-hard 问题有伪多项式时间的解法,则称这个问题是 弱 NPC/弱 NP-hard 问题。如果一个 NPC/NP-hard 问题在
可构造函数
时间可构造函数
有时,我们想让图灵机知道自己用了多长的时间,例如,强制图灵机在进行
如果存在图灵机
由于读入需要
空间可构造函数
类似地可以定义空间可构造函数。
如果存在图灵机
复杂度类之间的关系
时间谱系定理
确定性时间谱系定理
若
由确定性时间谱系定理可以得到
确定性时间谱系定理的证明
定义语言
现在假设
令通用图灵机
令
非确定性时间谱系定理
若
由非确定性时间谱系定理可以得到
空间谱系定理
若
其中
由空间谱系定理可以得到
萨维奇定理
一台确定性图灵机可以在一台非确定性图灵机所消耗空间的平方内模拟它(尽管消耗的时间可能多很多),即:
若
推论:
P?=NP
复杂度类
若
为什么 NP?=co-NP 不是显然的?
由于
实际上,上面所说的这种方法确实能够解决该
若
若
参考资料
Wikipedia 的相关词条以及这些词条的参考资料。
本页面最近更新:2023/5/6 19:22:00,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:Enter-tainer, ouuan, Backl1ght, CCXXXI, Chrogeek, Great-designer, GreyTigerOIer, Ir1d, pw384, Tiphereth-A
本页面的全部内容在 CC BY-SA 4.0 和 SATA 协议之条款下提供,附加条款亦可能应用