浅谈计算复杂性理论
任忠
乌鲁木齐石化公司计控中心
摘要:本文阐述了计算复杂性理论的产生、定义、研究内容和发展。
关键词:算法分析;计算复杂性;起源;发展
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年度图灵奖获得者。
另一个中心是麻省理工学院MIT,在那里,加州大学伯克利分校著名的计算机科学家Manuel Blum与前述两人互相独立地进行着相关问题的研究,并完成了他的博士论文:"Amachine independent theory of the complexity of recur- sive functions",Blum是受以色列学者M.O.Rabin的启发而开始这方面的研究的。
Rabin 是希伯莱大学的教授,是研究计算复杂性问题的先驱,并在1976年荣获图灵奖。
Blum的论文不但提出了有关计算复杂性的一些公理,而且在对复杂性类的归纳上也比其他学者有更高的抽象度。
因此布、哈、斯三人被学术界公认为计算复杂性理论的主要奠基人。
2.计算复杂性的定义、研究内容及发展
算法学是系统研究算法的设计、分析和验证的学科。
算法分析是为了确定算法的效用或算法的复杂性,以便比较求解同一问题的各种算法优劣。
而算法分析的理论基础就是计算法复杂性。
所谓"计算复杂性",通俗说来,就是用计算机求解问题的难易程度。
其度量标准:一是计算所需的步数或指令条数即时间复杂度,二是计算所需的存储单元数量即空间复杂度。
我们当然不可能也不必要就一个个具体问题去研究它的计算复杂性,而是依据难度去研究各种计算问题之间的联系,按复杂性把问题分成不同的类,即ComplexityClass。
计算复杂性理论是计算机科学中研究各类问题计算复杂性的分支学科,它使用数学方法对计算中所需的各种资源的耗费作定量的分析,并研究各类问题之间在计算复杂程度上的相互关系和基本性质,是算法分析的理论基础。
算法复杂性是针对特定算法而言。
而计算复杂性则是对特定问题而言。
后者是反映问题的固有难度。
计算复杂性等于最佳算法复杂性。
计算复杂性理论的主要研究内容是对复杂度函数增长的阶作分析,探讨它们对于不同的计算模型在一定意义下的无关性,根据复杂度的阶对被计算的问题分类,研究各种不同资源耗费之间的关系,对一些基本问题的资源耗费情况的上、下界作估计等。
它含四个层次:第一个层次是具体复杂性。
研究问题的时间复杂度和空间复杂度。
这一类研究通常包括在算法设计和分析学科分支中。
第二层是问题复杂度的上界和下界研究。
再上一层是研究语言复杂性类。
研究确定性和非确定性对复杂度的影响。
最后研究完全性、相对性和相似性。
由于篇幅所限,下面仅对P、NP类问题,常用的复杂性度量即时间复杂度和空间复杂度,问题的上下界及复杂性类等主要内容做简要阐述。
P类、NP类问题。
用图灵机作为标准的计算模型情况下,可以非形式化地定义如下几类计算问题:P类问题:由确定型图灵机在多项式时间内可解的一切判定问题所组成的集合;NP类问题:由非确定型图灵机在多项式时间内可计算的判定问题所组成的集合;NP完全问题:如果判定问题π∈NP,并且对所有其他判定问题π∈NP,都有π'多项式变换到π(记为π'∞π),则称判定问题π是NP完全的。
对P类,NP类及NP完全问题的研究推动了计算复杂性理论的发展,产生了许多新概念,提出了许多新方法。
但是还有许多难题至今没有解决,该学科一个基本问题:在计算时间多项式有界时,确定型机器与非确定型机器的解题能力是否相同,即P是否等于NP?就是其中之一。
许多学者猜想P≠NP,但无法证明。
时间复杂度和空间复杂度。
计算过程最重要的资源是所占时间和空间。
计算过程所耗费资源与问题规模有关。
例如,N个数排序,N越大,所需时间越多。
在计算复杂性理论中,算法所需时间和空间都是问题规模N的函数T(N),S(N)称为时间复杂度函数和空间复杂度函数。
当N确定后,可能有多种不同的实例,不同实例的计算时间仍可能不同。
如果选用所有规模为N的实例,所用最长时间作为T(N),则称之为最坏情况时间复杂度。
如果选用各实例所用时间的平均值作为T(N),则称之为平均时间复杂度。
计算复杂性的上界和下界。
它用以估计问题所需资源的复杂程度的界限函数。
研究计算复杂性的一个重要目的是要为各种问题寻求最优算法。
这就要先知问题的固有复杂度。
目前对于大多的问题而言,还只知道它最多需要多少、至少需要多少某种资源。
以时间为例:前者称为该问题的时间复杂度上界,后者称为下界。
上界越小越好,下界越大越好。
一旦对某问题,其上下界相等或接近了,就知道该问题的固有复杂度。
寻找问题的上界没有固定方法。
找到问题的一个算法,若其时间为T(N),则T(N)即为该问题复杂度的一个上界。
因为这表明解决问题用T(N)时间就足够了。
更小的上界,取决于设计更好的算法。
例:两个N维矩阵的乘积需要O(N3)时间。
用分治法设计的一个算法,使时间下降到o(N2.81),经过一系列工作,时间上界已降到o( N 2.376 )。
寻找问题的下界则困难的多。
因为必须证明,该问题的一切算法(包括已知和未知的)都至少需要这么多资源。
证明下界的常用方法有计数论证法和归纳方法。
目前下界的结果多集中在语言理论和逻辑理论中。
下面是两个通常问题的下界结果。
“N个数排序,其基于数的比较的时间复杂度至少是NlogN。
”“为了在图灵机上判断一个长度为N的数是否是某数的完全平方,其时间和空间复杂度的乘积至少正比于N2。
复杂性类。
根据识别时资源耗费的复杂程度而对形式语言所作的分类。
在多项式时间内用确定型机器可识别的语言可归入一类,记为P。
把那些用非确定型机器在多项式的串行时间内可识别的语言归入一类,记为NP。
在这种条件下无需说明采用什么计算模型,因为根据相似性原理,不论采用何种模型,P和NP的意义是不变的。
皮彭格提出P的一个重要子类称为NC,它由所有同时可在多项式的空间和对数多项式的并行时间内可计算的函数组成。
如果说P代表现实可计算的问题,那么NC即代表其中用多项式处理机在对数多项式时间内计算的问题。
整数的加减乘除运算、整序、图联通性、矩阵的乘法、除法、行列式、多项式的最大公因子、上下文无关语言识别、找图的最小张开树等问题都属于NC。
计算复杂性是计算机科学的一个重要分支。
图灵奖至今的39位得主中有6位是由于在计算复杂性方面的杰出贡献而获此殊荣。
目前,计算复杂性理论又进入了一个新的发展阶段。
一方面,随着科学技术的发展,计算复杂性理论将深入到各个数学分支中去。
另一方面,日益占据重要地位的并行计算推动了并行计算复杂性理论的发展,特别是人工智能和智能计算机的研究涉及人类行为的模拟及海量信息的处理,对计算复杂性理论提出了崭新的研究课题。