3 计算复杂性理论

合集下载

理解计算机中的计算理论与复杂性

理解计算机中的计算理论与复杂性

理解计算机中的计算理论与复杂性计算机中的计算理论与复杂性计算理论是计算机科学的重要分支之一,它研究计算过程的本质和性质,为计算机科学提供了理论基础。

而复杂性理论则研究计算问题的复杂性,即问题的难解程度。

在计算机发展的不断推动下,计算理论与复杂性的研究越发重要。

本文将从计算理论和复杂性两个方面对相关概念和研究进行介绍和探讨。

一、计算理论计算理论是计算机科学中关于计算概念和过程的研究。

它主要分为可计算性理论和形式语言与自动机理论两大部分。

1. 可计算性理论可计算性理论研究的是什么问题可以用计算机算出,以及如何判断一个问题是否可计算。

它的核心思想是“图灵机”,即由英国数学家图灵提出的一种理论模型,用于描述计算过程。

可计算性理论的研究对象包括了函数的计算性、计算问题是否可判定、可计算函数的分类等。

2. 形式语言与自动机理论形式语言与自动机理论研究的是描述和处理信息的形式化语言和自动机模型。

形式语言的研究对象包括了正则语言、上下文无关语言和上下文敏感语言等。

而自动机模型则包括了有限状态自动机、下推自动机和图灵机,用于描述和处理形式语言。

二、复杂性理论复杂性理论是研究计算问题的复杂性的学科。

它关注的是问题的求解难易程度,即问题的复杂性。

复杂性理论主要分为计算复杂性理论和各类计算问题的复杂性。

1. 计算复杂性理论计算复杂性理论研究的是计算问题的复杂性度量和分类。

其中最具代表性的是时间复杂性和空间复杂性。

时间复杂性研究的是计算问题在计算时间上的耗费,空间复杂性研究的是计算问题在计算空间上的耗费。

常用的时间复杂性度量是“大O记号”,用于表示问题在最坏情况下的耗时增长趋势。

2. 计算问题的复杂性计算问题的复杂性研究的是不同类型问题的复杂性分类以及它们之间的关系。

其中最经典的研究是关于P类问题和NP类问题的划分。

P 类问题指的是可以在多项式时间内求解的问题,而NP类问题指的是可以在多项式时间内验证的问题。

复杂性理论的研究则主要集中在P与NP问题之间的关系。

计算复杂性理论

计算复杂性理论

计算复杂性理论计算复杂性理论是计算机科学中重要的一个分支,它研究了计算问题的难度和可解性。

通过对问题的复杂性进行分析和分类,计算复杂性理论为我们提供了解决问题的指导原则和限制条件。

本文将介绍计算复杂性理论的基本概念、主要研究内容以及其在实际应用中的重要性。

一、基本概念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.了解可计算性和计算复杂性理论的基本概念和方法。

2.了解主要的计算模型和算法设计技术。

3.学会分析算法的时间和空间复杂度。

4.学会证明计算问题的不可解性和不可近似性。

5.培养学生的抽象思维和解决问题的能力。

教学内容1.可计算性理论介绍可计算性理论的基本概念,包括图灵机、递归函数、停机问题、可计算函数和不可计算函数等。

2.计算复杂性理论介绍计算复杂性理论的基本概念,包括时间复杂度、空间复杂度、P、NP、NP 完全问题、NP难问题等。

3.算法设计介绍常见的算法设计技术,包括贪心、动态规划、分治、回溯、随机化等。

4.算法分析介绍算法分析的基本方法和技巧,包括渐进符号、递归方程、对数级数等。

5.不可解性与不可近似性介绍一些经典的不可解性和不可近似性结果,包括halting problem、cook定理、PCP定理等。

教学方法本课程采用理论讲授和实践演练相结合的方式进行教学。

1.理论讲授通过讲授理论知识和解释实例,介绍可计算性和计算复杂性理论的基本概念和方法。

2.实践演练通过设计算法,分析算法复杂度,并完成一些经典问题的求解,锻炼学生的算法分析和实现能力。

教学评估1.平时成绩:作业和实验占比30%,课堂表现占比20%,出勤占比10%。

2.考试成绩:闭卷笔试,占比40%。

3.课程设计和报告:占比10%。

学生需要设计一个算法或证明一个不可解性或不可近似性定理,并完成一篇报告。

参考书目1.Sipser, M. (2012), Introduction to the Theory of Computation, 3rd edition, Cengage Learning.2.Papadimitriou, C. (1994), Computational Complexity, Addison-Wesley.3.Cormen, T. H., Leiserson, C. E., Rivest, R. L., & Stein, C. (2009). Introduction to Algorithms, 3rd edition, MIT Press.结语通过本课程的学习,学生可以深入了解计算机科学的核心理论,掌握算法设计和分析技术,以及认识到一些计算问题的不可解性和不可近似性。

第一讲:计算复杂性理论

第一讲:计算复杂性理论

大多数研究者认可 的包容关系
L m
计算复杂度的影响因素
简化模型:模型2
计算复杂度的影响因素
简化模型:模型3。
计算复杂度的影响因素
建模假设 例:高空抛球的运动轨迹。 ----抛物线模型 假设1.没有空气阻力; 假设2.地面是平面。 ----椭圆模型
计算复杂度的影响因素
探索空间1 探索空间1---解的近似度、满意度
例:0—10之间的整数解:1-9共9个可行解(一维) 0—10之间的实数解:精确到小数点后6位 共有107个可行解(一维); 107n个可行解(n维)
n! 10141世紀 → 10120世紀 102551世紀 → 102530世紀
问题与算法
每个問題都可能有多个算法存在. 每个算法的计算量(速度)都不同。 例: 赝品金币問題: 问题:9個外观完全一样的金币.,有一个是假的 (重量轻). 提问:用天秤来鉴别真伪,天秤需要使用几次?
贋品金币問題算法 問題算法
优化技术与方法
計算量(1) 計算量
+,-,×,÷ 比較:≠,≤,≥,<,> 5种基本演算都是用1step 可以实现. 実際上,×比+多占用時間. 「四舍五入」不算基本演算.
計算量(2) 計算量
{a1, a2,..., an}:n個整数 Q1. 求和(1): a1+a2+・・・+an. 1 + +a n-1 steps → O(n)算法. Q2. 求和(2): (1) 2×a1+・・・+ 2×an , 2n-1 steps→ O(n)算法. (2) 2×(a1+・・・+an) , n steps→ O(n)算法.
尚未确信能否用多項式時間算法求解的问题的 集合称为NP (non-deterministic polynomial)问题 某一个问题不属于NP问题的証明 如能够找到一个多項式時間算法 (簡単) 某一个问题属于NP问题的証明 可以归结为某一类既知的NP类问题(现阶段7类))

计算机科学中的计算复杂性理论

计算机科学中的计算复杂性理论

计算机科学中的计算复杂性理论计算复杂性理论是计算机科学中的一个重要分支,研究的是计算问题的算法复杂性和计算机问题的可解性。

它帮助我们理解计算问题是否有高效的解决方法,为设计和分析算法提供了基础。

一、引言计算复杂性理论涉及到算法的效率和计算问题的可解性,对计算机科学和信息技术具有重要意义。

本文将首先介绍计算复杂性理论的起源和发展,然后重点讨论几个计算复杂性理论中的重要概念和问题。

二、计算复杂性理论的起源和发展计算复杂性理论起源于20世纪60年代,由对计算问题的可解性进行研究逐渐演化而来。

该理论的研究者,如图灵奖得主阿隆佐·邱奇、史蒂芬·库克等,提出了多个理论模型和概念,奠定了计算复杂性理论的基础。

三、计算复杂性理论的重要概念1. P问题和NP问题在计算复杂性理论中,P问题指的是可以在多项式时间内解决的问题,而NP问题则是指可以在多项式时间内验证给定解是否正确的问题。

其中,P问题是NP问题的一个子集,即P⊆NP。

2. NP完全性NP完全性是计算复杂性理论中的一个重要概念。

一个问题是NP完全的,意味着它是NP问题中最难的一类。

如果我们能够找到一个多项式时间内解决NP完全问题的算法,那么可以得出P = NP的结论,这是计算机科学中的一个重大问题。

3. 计算复杂性度量计算复杂性理论通过引入时间复杂性和空间复杂性度量来衡量算法的效率。

其中,时间复杂性度量算法执行所需的时间步数,空间复杂性度量算法所需的存储空间。

这些度量帮助我们选择具有高效率的算法,提高计算问题的解决速度。

四、计算复杂性问题的研究方法计算复杂性理论研究问题的方法主要有两种:证明方法和求解方法。

证明方法通过证明某个问题是NP完全的来研究问题难度;而求解方法则是通过设计高效的算法来解决问题。

1. 证明方法证明方法是计算复杂性理论中常用的方法之一,它使用约简技术将一个已知的NP完全问题转化为待研究问题,从而证明待研究问题也是NP完全的。

复杂性理论 理论

复杂性理论 理论

复杂性理论理论复杂性理论:1. 什么是复杂性理论?复杂性理论是一种研究复杂系统的理论模式,通过对复杂系统中的网络结构、行为等进行探究,旨在找出复杂系统发展、演化及调节的机制,它把系统看作一个慢慢组装的社会、经济、文化及自然制度,以此来分析和预测它的未来发展和演变的趋势。

它的主要特点是:遵循自组织规律,发展出多样性;对复杂自一组元件和实体中产生有规律的新组织和新行为;系统发展中伴有异质性、不可控性和准确性等概念;以及它所存在的发展性质,趋于复杂化,发展规律。

2. 复杂性理论的基本特点①异质性:指的是一个复杂系统有多个不同的部分,这些部分通过复杂的相互关系作用在一起,形成一个不同的系统。

②多样性:指的是一个复杂系统的组件具有各种不同的特性,组成元素的结构特点和构成系统的网络形状也各不相同。

③互相衔接:指的是一个复杂系统中不同的部件之间存在有互相衔接、影响关系,通过衔接就可以调节系统发展的方向与节奏。

④不可控性:系统发展过程的规律除了被自身的互相衔接约束之外,还受外在边界和内部因素的影响,因此在系统路径、过程等方面具有不尽相同的结果,而且受外部环境影响,这些结果都是无法把握的。

⑤自组织特性:指的是在特定环境中,复杂系统会随着过程而产生有规律的新组织形态及僵化状态。

3. 复杂性理论的应用①未来发展预测:复杂性理论可以用来研究我们所处的环境及未来的发展趋势,如全球变暖的问题、全球经济危机的原因及趋势等问题。

②组织管理:复杂性理论也可以用在组织管理领域,帮助管理者深入理解组织内部复杂体系,发现组织变化的趋势,并积极把握组织未来发展的方向和节奏。

③人际关系:复杂性理论还可以用于研究及解释社会网络中的人际关系变化,如群体内某个个体对社会未来发展趋势的影响。

4. 结论复杂性理论是一种基于网络的理论研究,主要探究复杂系统的发展、演化及调控机制。

它的基本特点是异质性、多样性、互相衔接、不可控性和自组织特性。

它在未来发展预测、组织管理、人际关系研究等领域都有广泛的应用,可以帮助我们分析、预测,实现对复杂环境的发掘和掌控。

可计算性与计算复杂性

可计算性与计算复杂性

可计算性与计算复杂性1.可计算性:可计算性研究的是什么样的问题可以通过其中一种计算模型解决。

早期的计算模型是图灵机(Turing machine),后来发展出其他等效的计算模型,例如递归函数、Lambda演算等。

根据这些计算模型,可以定义一类问题为可计算问题,也就是可以通过计算模型求解的问题。

1.1停机问题:停机问题是可计算性的典型例子,它是指根据给定的程序和输入,判断这个程序是否会在有限的时间内停止运行。

根据图灵在20世纪30年代证明的停机问题的不可判定性,他证明了不存在一个通用的算法能够判断任意程序是否停机,这个结论被称为图灵不可判定性定理。

1.2基本计算问题:除了停机问题,可计算性还研究了一些其他的基本计算问题。

例如,可计算性研究了自动机是否可以接受一些字符串,或者函数是否可以被一个特定的计算模型计算等。

1.3计算模型的等效性:在可计算性理论中,研究了不同计算模型之间的等效性。

图灵机、递归函数和Lambda演算等计算模型之间可以相互转化,这意味着它们的计算能力是等价的。

这个等价性的概念对理解可计算性是至关重要的。

2.计算复杂性:计算复杂性研究的是什么样的问题可以在多项式时间内解决,以及在不同条件下求解问题所需要的计算资源(例如时间、空间等)。

计算复杂性理论的核心是研究问题的复杂度类别和难度。

2.1多项式时间可解问题:计算复杂性理论将问题分为多项式时间可解问题和非多项式时间可解问题。

多项式时间可解问题是指那些可以在多项式时间内求解的问题。

这些问题的解决方法被认为是高效的,因为随着输入规模的增加,所需计算资源的增长是可接受的。

2.2难解问题:非多项式时间可解问题是那些不可以在多项式时间内求解的问题。

例如,图的旅行商问题(TSP)和布尔可满足性问题(SAT)等问题被认为是难解问题。

难解问题的求解需要指数级的时间或空间复杂度,因此在实际中很难找到有效的算法。

2.3复杂度类别:计算复杂性理论还研究了不同问题的复杂度类别。

计算复杂性理论总结报告

计算复杂性理论总结报告

人生有几件绝对不能失去的东西:自制的力量,冷静的头脑,希望和信心 1计算复杂性理论总结报告一、 图灵机(1) 图灵机基本模型图灵机是山图灵(Alan Mathisom Turing)在1936年提出的,它是一个通用的计算 模型。

通过图灵机,来研究递归可枚举集和部分递归函数,对算法和可计算性进行研究 提供了形式化描述工具。

图灵机的基本模型包括一个有穷控制器,一条含有无数个带方格的输入带和一个读 写头。

其直观物理模型如下图1所示。

基本图灵动作有以下三种:(1) 改写被扫描带方格内容,控制器转化为下一状态。

(2) 读写头向左移一个带方格,控制器转化为下一状态。

(3) 读写头向左移一个带方格,控制器转化为下一状态。

图1图灵机(2) 图灵机形式化定义,图灵机演算过程及语言描述定义:一个基本图灵机定义为一个七元组TM={Q,C,6,A.B,ql,F)o 其中Q 是状态集合,(图灵机所有的状态)非空有限集;C 是带符号表,(放在带方格中的符号集合)非空集;6是控制函数或过程转换函数(定义控制器)6: QxCTQxCU (R.L); A 是输入字母表,ACC ;B 是空白符,BGC :ql 是初始状态,qlSQ ;F 是终态集,F £ Q.TM 的扫描符号串主要山6来确定:(1)5 (q, s)二(q‘,s'); (2)8 (q, s) =(q* , R); (3)8 (q, s) =(q* , L); (4) 6 (q, s)无效,对应无定义时图灵机终止。

TM 的工作用“格局”的转换来描述。

格局:6 ala2a3...aj-lqajaj+l...其中 qWQ, aiGC ;帯(1)若8 (q, ai)无定义,称o为停机格局;(2)若qEF,称o为接受格局;人生有几件绝对不能失去的东西:自制的力量,冷静的头脑,希望和信心__(3) 若q为初始状态,称o为初始格局;格局O到格局T的转换a 卜mt 若成立go 1 |~mlo2 卜m2。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算复杂性理论(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。

在这篇论文中,作者引入了时间复杂性类TIME(f(n))的概念,并利用对角线法证明了时间层级定理(Time Hierarchy Theorem)。

在此之后,许多研究者对复杂性理论作出了贡献。

期间重要的发现包括:对随机算法的去随机化(derandomization)的研究,对近似算法的不可近似性(hardness of approximation)的研究,以及交互式证明系统(Interactive proof system)理论和零知识证明(Zero-knowledge proof)等。

特别的复杂性理论对近代密码学的影响非常显著,而最近,复杂性理论的研究者又进入了博弈论领域,并创立了“算法博弈论”(algorithmic game theory)这一分支。

该领域重要的研究者有(不完全列表):∙史提芬·古克∙姚期智(Andrew Chi-Chih Yao)∙Allan Borodin∙Manuel Blum∙Juris Hartmanis∙Richard Karp∙Leonid Levin∙Alexander Razborov∙Michel Sipser∙Avi Wigderson∙Walter Savitch∙Richard Stearns∙Lance Fortnow∙V. Arvind∙Lazlo Babai[编辑]基本概念和工具[编辑]计算模型与计算资源计算复杂性理论的研究对象是算法在执行时所需的计算资源,而为了讨论这一点,我们必须假设算法是在某个计算模型上运行的。

常讨论的计算模型包括图灵机(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的判定型问题的算法。

反之,给定了一个A的判定型问题的算法,是否存在A的搜索型问题的算法,在可计算性理论和计算复杂性理论中有着不同的回答,这也是理解计算复杂性理论与它的前身可计算性理论不同的一个基本的观察。

在可计算性理论中,可以说明,判定型问题和搜索型问题在可计算性的意义下是等价的(见Decision problem)。

而在计算复杂性中,Khuller和Vazirani在1990年代证明了在P≠NP的假设下,平面图4-着色问题的判定型问题是在P中的,而寻找其字典序第一的着色是NP难的。

[1]所以在可计算性理论中,只关注判定型问题是合理的。

在计算复杂性理论中,虽然一些基本的复杂性类(如P,NP和PSPACE),以及一些基本的问题(P和NP 关系问题等)是用判定型问题来定义的,但函数型问题复杂性类也被定义(如FP,FNP等),而且一些特别的函数型问题复杂性类,如TFNP,也正在逐渐受到关注。

[编辑]算法分析上面提到计算复杂性理论的研究对象是执行一项计算任务所用的资源,特别的,时间和空间是最重要的两项资源。

我们用时间作例子来讨论算法分析的一些基础知识。

如果将输入的长度(设为n)作为变量,而我们关注的是算法运行时间关于n的函数关系T(n)。

因为一个算法在不同的计算模型上实现时T(n)可能会有常数因子的差别(参见可计算性理论),我们使用大O表达式来表示T(n),这使得我们可以忽略在不同计算模型上实现的常数因子。

以搜索这个计算任务为例。

在搜索问题中,给定了一个具体的数s,和长度为n 的数组A(数组中数的位置用1到n作标记),任务是当s在A中时,找到s的位置,而s不在A中时,需要报告"未找到"。

这时输入的长度即为n+1。

下面的过程即是一个最简单的算法:我们依次扫过A中的每个数,并与s进行比较,如果相等即返回当前的位置,如果扫遍所有的数而算法仍未停止,则返回"未找到"。

如果我们假设s在A中每个位置都是等可能的,那么算法在找到s的条件下需要1/n (1+2+...+n)=n(n+1)/2n=(n+1)/2的时间。

如果s不在A中,那么需要(n+1)的时间。

由大O表达式的知识我们知道算法所需的时间即为O(n)。

而如果我们进一步假设A是已排序的,那么我们有二分查找算法,使得算法的运行时间是O(logn)。

可以看出执行一项计算任务,不同的算法在运行时间上是有很大差异的。

[编辑]复杂性类将计算问题按照在不同计算模型下所需资源的不同予以分类,从而得到一个对算法问题“难度”的类别,就是复杂性理论中复杂性类概念的来源。

例如一个问题如果在确定性图灵机上所需时间不会超过一个确定的多项式(以输入的长度为多项式的不定元),那么我们称这类问题的集合为P(polynomial time Turing machine)。

而将前述定义中的“确定性图灵机”改为“不确定性图灵机”,那么所得到的问题集合为NP(non-deteministic polynomial time Turing machine)。

类似的,设n为输入的长度,那我们可以定义“在确定性图灵机上所需空间不超O(logn)的算法问题的集合”(即为L),“存在深度为O(logn),输入的度(fan-in)为O(1)的电路族(circuit family)的算法问题的集合”(即为NC1)等等复杂性类。

定义复杂性类问题的目的是为了将所有的算法问题进行分类,以确定当前算法的难度,和可能的前进方向。

这是复杂性理论的一个主线之一:对算法问题进行抽象和分类。

例如透过大O表达式,我们可以对忽略因计算模型不同而引入的常数因子。

而第二个重要的理论假设,就是将多项式时间作为有效算法的标志(与之对应的是指数时间)。

这样,复杂性类使得我们可以忽略多项式阶的不同而专注于多项式时间和指数时间的差别。

(对多项式时间作为有效算法的标志这一点是有一定争议的,比如,如果算法的运行时间n10,那它也可以看作是缓慢的,见理论与实践。

)在本文的其余章节,“有效算法”等价于“多项式算法”[编辑]归约归约(reduction)是将不同算法问题建立联系的主要的技术手段,并且在某种程度上,定义了算法问题的相对难度。

简单来说,假设我们有算法任务A和B,如果我们想说“A比B简单”(记为A≤B),它应该是什么意思呢?从归约的观点来看,就是说如果我们有了B的有效算法M,那么我们有一个有效算法N,它可以引用M,最终它要解决A问题。

我们以点集覆盖问题(vertex cover)和独立集问题(independent set)为例来进行说明。

这两个问题都是图论中的问题。

假设给定了无向图G=(V, E),和一个自然数k,点集覆盖问题是要找到V的子集S,使得对∀e∈E,有s∈ S,使得s∈ e,且|S|≤k;而独立集问题也是要找V的子集S,要求是∀s1, s2∈S,(s1, s2)∉ E,且|S|≤k。

一个简单的观察即是:对G=(V, E),一个S⊂V是覆盖点集,当且仅当S在G的补图中是独立点集(而且保持集合大小)。

利用这个观察,假设我们有了解决覆盖点集问题的算法M,我们设计解决独立点集的算法N如下:∙算法N。

o输入:给定无向图G=(V, E),自然数k;o输出:一个大小≤ k的独立点集(如果存在,否则返回“不存在”);o已知:算法M,输入为(无向图G, 自然数k),输出大小≤ k的覆盖点集,如果这样的点集存在。

相关文档
最新文档