精华内容
下载资源
问答
  • 计算复杂性

    2018-12-20 15:24:38
    计算复杂性作为计算学科的一门比较基础的学科,有利于理解计算机的工作原理
  • 内含吉林大学可计算性与计算复杂性课本(李占山)以及课上PPT与习题讲解
  • 计算复杂性导论

    2017-10-09 16:06:09
    计算复杂性导论》可用作计算机专业、计算数学专业的计算机理论课程的教材,也是有关研究人员不可或缺的参考书。计算复杂性理论是用数学方法研究使用数位计算机解决各种算法问题困难度的理论。《计算复杂性导论》对...
  • 计算复杂性导论 堵

    2017-10-19 05:25:22
    计算机复杂性 堵顶柱 老师的书,计算机复杂性 堵顶柱 老师的书计算机复杂性 堵顶柱 老师的书计算机复杂性 堵顶柱 老师的书计算机复杂性 堵顶柱 老师的书计算机复杂性 堵顶柱 老师的书计算机复杂性 堵顶柱 老师的书...
  • 可计算性与计算复杂性导引 第二版
  • 量子计算复杂性理论综述,详细介绍了,量子计算复杂性理论相关研究
  • 可计算性与计算复杂性课件,中国科学院大学2014秋季的课件,夏道藏老师的课件。。
  • 计算复杂性理论

    千次阅读 2019-06-09 00:24:03
    计算复杂性理论 在计算机算法中,计算复杂性是一个很重要的研究内容。计算复杂性理论(Computational complexity theory)被认为是理论计算机科学和数学的一个分支。 对于计算机而言,任何一个问题的求解都需要资源...

    查看原文,点我

    计算复杂性理论

    在计算机算法中,计算复杂性是一个很重要的研究内容。计算复杂性理论(Computational complexity theory)被认为是理论计算机科学和数学的一个分支。

    对于计算机而言,任何一个问题的求解都需要资源(即使是最简单的1+1的问题)。计算复杂性理论通过引入数学计算模型来研究这些问题以及定量计算解决问题所需的资源(时间和空间),从而将资源的确定方法正式化。

    计算复杂性理论将计算问题按照在不同计算模型下所需时间资源的不同予以分类,就得到了常见的P、NP、NP完全、NP难这样的概念(note:P代表Polynomial,即多项式时间的概念

    P问题

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

    通俗地来说P问题就是多项式时间内可解的问题

    NP问题

    可以在非确定型图灵机上在多项式时间内找出解的问题的集合

    如果一个问题,可以在多项式时间内验证他的解是否正确,则该问题是一个NP问题。显然PNPP\in NP (note:到目前为止,P不等于NP)

    NP-C问题(NP-Complete)

    这里Complete是完备的意思

    一个决定性问题C若是为NPC,则代表它对NP是完备的,这表示:

    a) 该问题是一个NP问题
    b) 所有属于NP的问题都可归约成该问题

    对于一个NP-C问题,我们不可能尝试将所有的NP规约到它,所以通常采用下述方法证明一个问题是NP-C问题:

    a) 证明给定该问题的一个解,可以在多项式时间验证该问题
    b) 可以将一个已知的NP-C问题规约到该问题(已经证明的NPC问题:卡普的21个NPC问题或者A compendium of NP optimization problems)

    在计算复杂度理论内,一个极度重要的成就是史提芬·古克在1971年证明出了第一个NP-完全问题— 布尔可满足性问题。

    Cook定理(1971) 可满足问题属于NP-C

    可满足问题(SAT)
    可满足问题是判断任意给定的一个布尔表达式是否存在一个真赋值(如果有这样一个真赋值,则称该布尔表达式可满足)

    NP-Hard

    相较于NP-C问题,NP-Hard问题仅满足条件2

    即所有的NP问题都可以规约到NP-Hard问题
    通常通过将一个已知的NP-C问题规约到该问题来证明一个问题是NP-Hard问题

    我们可以得到以下的关系图:

    证明P=NPP=NP是一个未解决的千禧年难题,当然如果最终证明P=NPP=NP,会发生很多“有趣”的事情:比如当下流行的密码理论将不再安全,可能这时能够期待的就只有量子加密技术的早日出现吧。

    基本概念

    多项式时间

    多项式时间可解的问题,即P问题,通常被认为是一个易解的问题;一个多项式时间的算法往往也被认为是好的算法。然而多项式时间具体是什么含义?

    在计算复杂度理论中,多项式时间(Polynomial time)指的是一个问题的计算时间m(n)不大于问题大小n的多项式倍数。用数学语言描述则为m(n)=O(nk)km(n)= O(n^k),k为一常量值。

    规约(reduction)

    在可计算性理论与计算复杂性理论中,归约是将某个计算问题转换为另一个问题的过程。比较直观的说法:如果一个能有效解决问题B的算法,也可以作为解决问题A的子程序,则将问题A称为“可归约”到问题B,因此求解A并不会比求解B更困难。

    规约是证明NP-Hard问题的一种常用方法,通常用<=<=这个符号来表示,如p<=Qp<=Q,表示P is reducible to Q , or Q is the reduction from P or P is reduced to Q(P问题可以归约到Q问题,or可以把P归约到Q)。方便记忆的话,这里的规约符号可以记作小于且等于,即说明问题P至少比Q容易,或者Q至少比P难

    • 问题A能够规约为问题B
      a) 一个能求解问题B的算法一定可以用来求解问题A(以子问题的形式)
      b) 求解问题A的难度一定不会比求解问题B的难度大(这里的难度大指的是求解过程需要更多的计算、存储资源等)。——>可以从侧面证明,如求解A的难度更大,而由于A可以规约为问题B,则可以用求解问题B的算法来求解问题A,则求解A的算法可以替换为一个难度更低的算法
    • 规约具有传递性:A可以规约为B,B能规约为C,则A一定可以规约为C

    可以说,一个问题归约为另一个问题的过程,是将问题复杂化的过程。归约得到问题的应用范围往往也扩大了。例如,一元二次方程的求解和一元一次方程的求解。

    规约的类型较多,在本文中的规约特指多项式时间规约,即在多项式时间内将一个问题规约到另一个问题。

    多项式归约主要做的就是以下两个转化(注意两个转化都要在polynomial的时间内完成)

    • 把P的输入转化到Q的输入;
    • 把Q的输出转化到P的输出。

    3SAT

    3SAT问题定义如下:

    给定一个有穷的布尔变量集合X={x1,x2,,xn},X=nX=\{x_1,x_2,\cdots,x_n\},|X|=n,每个变量取值为0或1,有一组子句(Clause)C={C1,C2,,Cm},C=m,C=C1C2CmC=\{C_1,C_2,\cdots,C_m\},|C|=m,C=C_1\cap C_2\cap\cdots \cap C_m,每个CiC_i是由三个变量组成的析取范式,即z1z2z3z_1\cup z_2 \cup z_3.

    其中

    • xix_i是布尔变量(Variable)
    • 一个布尔变量xix_i或它的否定形式xiˉ\bar{x_i}是文字(literal)
    • CiC_i为子句,一个子句包含3个文字(literal)

    总的来说,一个SAT问题例子中包含一堆子句(Clause),这一堆子句每个都包含3个文字(Literal),每个literal表示命题变元集中一个布尔变量(Variable)或它的否定形式

    一个3SAT的例子:

    X={x1,x2,x3},C={C1,C2,C3},C1=x1x2ˉx3,C2=x1ˉx2ˉx3,C3=x1ˉx2x3ˉX=\{x_1,x_2,x_3\},C=\{C_1,C_2,C_3\},C_1=x_1\cup \bar{x_2}\cup x_3,C_2=\bar{x_1}\cup \bar{x_2}\cup x_3,C_3=\bar{x_1}\cup x_2\cup \bar{x_3}
    存在一个真值赋值:x1,x2=1,x3=1x_1,x_2=1,x_3=1,使得C=1C=1,即该布尔表达式是可满足的

    对于3SAT问题,有以下结论

    3SATNPC3SAT\in NPC

    0-1背包问题

    众所周知,0-1背包问题是一个NP-C问题,应用动态规划算法可以得到伪多项式时间的算法,如何证明0-1背包问题是一个NP-C问题?

    0-1 背包问题(0-1 Knapsack)在数学上的定义如下:

    通俗的来讲就是:

    我们有n种物品,物品j的重量为wjw_j,价格为pjp_j,我们假定所有物品的重量和价格都是非负的。背包所能承受的最大重量为W.在限定的总重量内,我们如何选择,才能使得物品的总价格最高.如果限定每种物品只能选择0个或1个,则问题称为0-1背包问题

    0-1背包问题本质上是一个优化问题,为了证明0-1背包问题是一个NP-C问题,我们首先引入0-1背包问题对应的判定问题(记作0-1 Knapsack Fill )

    我们有n种物品,物品j的重量为wjw_j,价格为pjp_j,我们假定所有物品的重量和价格都是非负的,限定每种物品只能选择0个或1个,是否存在一个选择策略,使得选择的物品总重量为W

    看上去似乎引入0-1 Knapsack Fill问题没有任何用处,实际上对于优化问题和其对应的判定问题,有如下结论:

    一个优化问题,不会比其对应的判定问题简单

    由此,可以从0-1 Knapsack Fill问题入手,来证明0-1 Knapsack问题的复杂性

    1. 证明0-1 Knapsack Fill \in P问题
      显然给定0-1 Knapsack的一个解,可以在多项式时间内验证该解是否正确:对选取的物品集合做一次遍历,累加得到价格和重量总和,即可验证。所以0-1 Knapsack Fill \in P问题.

    2. 将一个已知的NP-C问题规约到0-1 Knapsack Fill问题(多项式时间内)
      证明3SAT<=0-1 Knapsack Fill

      • 对于一个3SAT问题,设X={x1,x2,,xn},X=nX=\{x_1,x_2,\cdots,x_n\},|X|=n,有一组子句C={C1,C2,,Cm},C=m,C=C1C2CmC=\{C_1,C_2,\cdots,C_m\},|C|=m,C=C_1\cap C_2\cap\cdots \cap C_m
      • 对于0-1 Knapsack Fill问题,存在一组物品UU和背包容量W,我们希望得到结论:当且仅当C可满足时,存在物品集合的子集UUU^{'}\in U 使得uUw(u)=W\sum_{u\in U^{'}} w(u)=W

      为了将3SAT规约到0-1 Knapsack Fill,做出以下定义:

      • 对于每个布尔变量xix_i,对应uiuiˉu_i和\bar{u_i}
      • 对于每个子句cjc_j,定义两个补偿对象(compensating objects)co1jco2jco1_j和co2_j
      • (n+m)(n+m)长度的3进制数表示物品重量w(u)w(u),其中第ii个数字与布尔变量xix_i相关;第(n+j)(n+j)个数字,与子句cjc_j相关。
        • 对于uiuiˉu_i和\bar{u_i}
          • 最右边nn个数字:第ii个数字为1,其余数字为0
          • 最左边mm个数字:如果xi(uix_i(与u_i相关)或者xiˉ(uiˉ)\bar{x_i}(与\bar{u_i}相关)在子句cjc_j中出现,则第n+jn+j个数字为1,其余数字为0
        • 对于co1jco2jco1_j和co2_j
          • 最右边nn个数字:全为0
          • 最左边mm个数字(用来标识对应的子句cjc_j):第n+jn+j个数字为1,其余数字为;co1jco2jco1_j和co2_j的重量相同
        • 背包容量WW
          • 最右边nn个数字:全为1
          • 最左边mm个数字:全为3

      通过上述转化过程,我们将一个3SAT问题归约到了0-1 Knapsack Fill实例(显然该过程是在多项式时间内,因为每一步的转化过程都是确定的),该实例有以下特点:

      • U={ui,uiˉ:1in}{co1j,co2j:1jm}U=\{u_i,\bar{u_i}: 1\leq i\leq n\}\cup\{co1_j,co2_j: 1\leq j \leq m\}
        • w(ui)(n+m)w(u_i)由(n+m)个二进制数组成
          • ii个数字为1
          • 当且仅当xix_i在子句cjc_j中出现时,第n+jn+j个数字为1
          • 其余所有数字均为0
        • w(uiˉ)(n+m)w(\bar{u_i})由(n+m)个二进制数组成
          • ii个数字为1
          • 当且仅当xiˉ\bar{x_i}在子句cjc_j中出现时,第n+jn+j个数字为1
          • 其余所有数字均为0
        • w(co1j)=w(co2j)(n+m)w(co1_j)=w(co2_j)由(n+m)个二进制数组成
          • n+jn+j个数字为1
          • 其余所有数字均为0
      • 背包容量WW(n+m)(n+m)长度的二进制数
        • 最右的nn个数为1
        • 最左的mm个数为3

      对于任意一个3SAT问题,我们都可以通过上述过程转化为一个0-1 Knapsack Fill问题,为证明0-1 Knapsack Fill问题的复杂性,只需证明:当且仅当C可满足时,存在物品集合的子集UUU^{'}\in U 使得uUw(u)=W\sum_{u\in U^{'}} w(u)=W

      • 先证明存在物品集合UUU^{'}\in U使得uUw(u)=W\sum_{u\in U^{'}} w(u)=W时,C可满足
        • 假设已得到部分物品集合UUU^{'}\in U使得uUw(u)=W\sum_{u\in U^{'}} w(u)=W
        • 最右边的nn个数字全为1:保证ui,uiˉu_i,\bar{u_i}有且仅有一个出现在集合UU^{'}(否则第ii个数字的值为0或2,与假设冲突)——>可以得到一组3SAT中布尔变量的赋值,记作vv
          • 如果uiUu_i\in U^{'},则有xiv=1x_i^{v}=1
          • 如果uiˉU\bar{u_i}\in U^{'},则有xiˉv=1xiv=0\bar{x_i}^{v}=1或者x_i^v=0
        • 最右边的mm个数字均为3:保证每个子句cjc_j均是可满足的,即CC可满足
          • 如果co1j,coj2Uco1_j,coj_2均不属于U^{'},有uU,u=uioru=uiˉw(u)=3\sum_{u\in U^{'},u=u_i or u=\bar{u_i}} w(u)=3。所以子句cjc_j中的布尔变量均为1,所以每个子句均可满足
          • 有且仅有co1j,coj2Uco1_j,coj_2中的一个属于U^{'},,有uU,u=uioru=uiˉw(u)=2\sum_{u\in U^{'},u=u_i or u=\bar{u_i}} w(u)=2。所以子句cjc_j中有两个布尔变量为1,所以每个子句均可满足(合取范式)
          • co1j,coj2Uco1_j,coj_2均属于U^{'},,有uU,u=uioru=uiˉw(u)=1\sum_{u\in U^{'},u=u_i or u=\bar{u_i}} w(u)=1。所以子句cjc_j中有一个布尔变量为1,所以每个子句均可满足(合取范式)
      • 证明当C可满足时,存在物品集合的子集UUU^{'}\in U 使得uUw(u)=W\sum_{u\in U^{'}} w(u)=W
        • 与上述证明过程类似,这里不再赘述

      通过上述过程,我们有3SAT<=0-1 Knapsack Fill

      • 输入过程:xi,xiˉui,uiˉx_i,\bar{x_i}与u_i,\bar{u_i}对应;xi,xiˉcj(n+j)x_i,\bar{x_i}是否在子句c_j中出现由第(n+j)个数字标识,结合而成的(n+m)(n+m)个数字表示物品重量
      • 输出过程:当且仅当C可满足时,存在物品集合的子集UUU^{'}\in U 使得uUw(u)=W\sum_{u\in U^{'}} w(u)=W

      给出一个3SAT<=0-1 Knapsack Fill的例子:

      3SAT:
      X={x1,x2,x3,x4,x5},C={c1,c2,c3,c4},c1={x1,x2ˉ,x4},c2={x2,x3ˉ,x5ˉ},c3={x3,x4,x5},c4={x1ˉ,x2,x5ˉ}X=\{x_1,x_2,x_3,x_4,x_5\},C=\{c_1,c_2,c_3,c_4\},c_1=\{x_1,\bar{x_2},x_4\},c_2=\{x_2,\bar{x_3},\bar{x_5}\},c_3=\{x_3,x_4,x_5\},c_4=\{\bar{x_1},x_2,\bar{x_5}\}
      对应的0-1 Knapsack Fill问题:
      U={u1,u1ˉ,u2,u2ˉ,u3,u3ˉ,u4,u4ˉ,u5,u5ˉ,co11,co21,co12,co22,co13,co23,co14,co24}U=\{u_1,\bar{u_1},u_2,\bar{u_2},u_3,\bar{u_3},u_4,\bar{u_4},u_5,\bar{u_5},co1_1,co2_1,co1_2,co2_2,co1_3,co2_3,co1_4,co2_4\},W=333311111.
      物品集合U中物品对应重量为:

    综合证明1和2,可知0-1 Knapsack Fill\in NPC

    对于0-1 knapsack问题,给定其一个解,无法在多项式时间内验证该解是否正确:

    • 可以从侧面给出不严谨证明:0-1 knapsack是一个优化问题,如果能在多项式时间内验证一个解,相当于能在多项式时间内求出该优化问题的最优解

    综上:可知0-1 knapsack\inNP-Hard

    展开全文
  • 哈尔滨工业大学李建中计算复杂性初步第一张PPT,2018年
  • 本书是学习计算理论的教材和参考书,内容包括三部分:可计算性、形式语言与自动机、计算复杂性.主要 介绍几种计算模型及它们的等价性,函数、谓词和语言的可计算性等基本概念,形式语言及其对应的自动机模 型,时间...
  • 计算机复杂性理论

    2020-07-22 22:13:09
    计算复杂性理论(Computational complexity theory)是理论计算机科学和数学的一个分支,它致力于将可计算问题根据它们本身的复杂性分类,以及将这些类别联系起来。一个可计算问题被认为是一个原则上可以用计算机...

           计算复杂性理论(Computational complexity theory)是理论计算机科学和数学的一个分支,它致力于将可计算问题根据它们本身的复杂性分类,以及将这些类别联系起来。一个可计算问题被认为是一个原则上可以用计算机解决的问题,亦即这个问题可以用一系列机械的数学步骤解决,例如算法

           如果一个问题的求解需要相当多的资源(无论用什么算法),则被认为是难解的。计算复杂性理论通过引入数学计算模型来研究这些问题以及定量计算解决问题所需的资源(时间和空间),从而将资源的确定方法正式化了。其他复杂性测度同样被运用,比如通信量(应用于通信复杂性),电路中门的数量(应用于电路复杂性)以及中央处理器的数量(应用于并行计算)。计算复杂性理论的一个作用就是确定一个能或不能被计算机求解的问题的所具有的实际限制。

           在理论计算机科学领域,与此相关的概念有算法分析和可计算性理论。两者之间一个关键的区别是前者致力于分析用一个确定的算法来求解一个问题所需的资源量,而后者则是在更广泛意义上研究用所有可能的算法来解决相同问题。更精确地说,它尝试将问题分成能或不能在现有的适当受限的资源条件下解决这两类。相应地,在现有资源条件下的限制正是区分计算复杂性理论和可计算性理论的一个重要指标:后者关心的是何种问题原则上可以用算法解决。

    展开全文
  • 顾 小 丰 Emailguxf@ * 第5章 算法的计算复杂性和计算模型 5.1 算法与它的计算复杂性 算法的研究是计算机科学的核心课题之一早在近代计算机问世之前人们就致力于算法概念的研究一般地说算法的实现要凭借某种计算模型...
  • 计算复杂性综述

    千次阅读 2019-05-15 15:50:10
    计算复杂性 目录 文章目录计算复杂性前言正文一、计算复杂性理论基本问题(一)时间复杂度(二)Cook-Karp论题(三)Church论题二、判定问题类(一)P问题(Polynomial Problem)(二)NP问题(Non-deterministic ...
    
    

    计算复杂性

    目录

    前言

      计算,实际上是解决问题的过程。人们希望用计算机能找到解决一切问题的方法,在计算领域建立了算法理论和算法模型,并根据各种问题提出具体算法。即使很多问题理论上可以计算,但是实际情况中考虑到计算复杂性,即问题的时空需求太过复杂,是实际不可行的计算问题。

      符号主义机器学习是人工智能知识工程学派的一个分支,旨在寻找一个终极、通用的强人工智能。20世纪70年代,基于知识的系统取得卓越成绩,而到了80年代,它们迅速传播,后来却消失了。它们消失的主要原因是知识习得瓶颈:文法的不断扩张使设计达到无限、逻辑推理非常困难、找不到通用判断文法,被证明为NP难问题。

      连接主义机器学习的支持者像是经验主义者,认为所有的推理都是不可靠的,知识必须来源于观察及实验。他们构建的人工神经网络达到了极高的深度,所消耗的代价也相当高,谷歌的AlphaGo与李世石下棋的过程,有大量机器在参与运算,仅一场比赛就耗电3000美元。

      由此可见,人工智能未来的发展仍然曲折坎坷,为了评估未来将要出现的算法和模型,有必要弄清问题是否实际可计算以及计算复杂性问题。

    正文

    一、计算复杂性理论基本问题

    (一)时间复杂度

      时间复杂度并不是表示一个程序解决问题需要花多少时间,而是当问题规模扩大后,程序需要的时间长度增长得有多快。对于高速处理数据的计算机来说,处理某一个特定数据的效率不能衡量一个程序的好坏,而应该看当这个数据的规模变大到数百倍后,程序运行的效率。

      不管数据有多大,程序处理花的时间始终是那么多的,我们就说这个程序很好,具有O(1)的时间复杂度,也称常数级复杂度。
    数据规模变得有多大,花的时间也跟着变得有多长,这个程序的时间复杂度就是O(n),比如找n个数中的最大值;而像冒泡排序、插入排序等,数据扩大2倍,时间变慢4倍的,属于O(n^2)的复杂度。
    还有一些穷举类的算法,所需时间长度成几何阶数上涨,这就是O(a^n)的指数级复杂度,甚至O(n!)的阶乘级复杂度。

    (二)Cook-Karp论题

      背景:1971年,Cook和Karp提供了实际可行的计算的标准,即多项式时间算法标准。区分了可计算问题中实际可计算的问题和实际不可计算的问题。实际可计算问题称为多项式时间可计算,实际不可计算的问题称为指数时间可计算。

      内容:一个算法实际可行当且仅当它是多项式时间可计算的。

      时间复杂度: 解决问题需要的时间与问题的规模之间的多项式关系。

      多项式时间复杂度:多项式关系形如O(n^k),k为某个常数,n是问题的输入规模。例如,时间复杂度为O(nlog(n))O(n^3)都是多项式时间复杂度。

      指数时间复杂度:时间复杂度为O(n^log(n))O(2^n)是指数时间复杂度,O(n!)是阶乘时间复杂度。像O(a^n)O(n!)型的时间复杂度,它是非多项式级的,其复杂度计算机往往不能承受。

      因此,将实际可计算问题定义成多项式时间可计算,将实际不可计算问题定义成指数时间可计算,在目前的计算机体系结构下,无法支持这样大量的运算。

    (三)Church论题

      概述:邱奇论题是一个关于可计算性理论的假设。该假设论述了关于函数特性的,可有效计算的函数值(用更现代的表述来说–在算法上可计算的)。简单来说,邱奇-图灵论题认为“任何在算法上可计算的问题同样可由图灵机计算”。[1]

      前提:声称一个函数是“可有效计算的”究竟意味着什么–在某种意义上是不甚明确的直觉结果。所以,该论题依然是一个假想。

      有效性:Rosser于1939年对“可有效计算性”进行了如下的解读:“很明显CC和RC(邱奇和Rosser的论据)的成立依赖于对‘有效性’的严格定义。‘有效的方法’主要是指该方法的每一步都可被事先确定,而且该方法可在有限的步数之内生成结果”。[2]“有效方法”这个想法在直觉上是清楚的,但却没有在形式上加以定义,因为什么是“一个简单而精确的指令”和什么是“执行这些指令所需的智力”这两个问题并没有明确的答案。

      意义:现在普遍认为邱奇-图灵论题是正确的。但是,该论题不具有数学定理一般的地位,也无法被证明;说是定理不如说是个将可计算性等同于图灵机的提议。如果能有一个方法能被普遍接受为一个有效的算法但却无法在图灵机上允许,则该论题也是可以被驳斥的。[3]

      海狸很忙函数:是一个著名不可计算函数,接受输入n,返回具有n个状态的图灵机在停机之前所能打印的最大符号数量。找到海狸很忙函数的上限等于解决停机问题,该问题已被确定图灵不可解。邱奇-图灵论题断言该函数不能使用任何方法进行有效计算。[4]

    二、判定问题类

    (详见CSDN博客《P问题、NP问题、NPC问题(NP完全问题)、NPH问题和多项式时间复杂度》
    在这里插入图片描述

      根据问题的复杂度将问题归类为P问题、NP问题、NPC问题、NPH问题、Non-NP问题,各问题的关系猜测上如图所示,正确性有待验证。

    (一)P问题(Polynomial Problem)

      定义:在多项式时间内可解的问题为P问题(多项式问题)。[5]

      例子:时间复杂度为O(nlog(n))的快速排序和堆排序,O(n^2)的冒泡排序和直接选择排序算法都是P问题,也就是多项式时间算法。而我们也只在乎一个问题是否存在多项式算法,因为一个时间复杂度比多项式算法还要复杂的算法研究起来是没有任何实际意义的。

    (二)NP问题(Non-deterministic Polynomial Problem)

      定义: NP问题(非确定性多项式问题),指问题只能通过验证给定的猜测是否正确来求解。所谓多项式指的是验证猜测可在多项式时间内完成,所谓非确定性指的是问题只能通过验证猜测来解,而不能直接求解。

      例子:如Hamilton回路是NP问题,因为验证一条路是否恰好经过了每一个顶点可在多项式时间内完成,但是找出一个Hamilton回路却要穷举所有可能性,不能直接求解。又如大合数的质因数分解,没有给定的公式可直接求出一个合数的两个质因数是什么,但是验证两个数是否是质因数却可在多项式时间完成,所以它也是非确定性多项式问题,即NP问题。

      意义:之所以要定义NP问题,是因为通常只有NP问题才可能找到多项式的算法。我们不会指望一个连多项式地验证一个解都不行的问题存在一个解决它的多项式级的算法。

      与P问题的区别:存在多项式时间的算法的一类问题,称之为P类问题;而像梵塔问题,推销员旅行问题等问题,至今没有找到多项式时间算法解的一类问题,称之为NP问题。同时,P类问题是NP问题的一个子集。也就是说,能多项式时间地解决一个问题,必然能多项式时间地验证一个问题的解。

    (三)P对NP问题(P versus NP problem)

      背景:P对NP问题是Steve Cook于1971年首次提出。“P/NP问题”,假如NP问题能找到算法使其在多项式时间内解决,也就是证得了P=NP。比NP问题更难的则是NP完全和NP-hard,如围棋便是一个NP-hard问题。

      优化性问题向判断性的转换:为了研究问题的复杂性,我们必须将问题抽象简化,我们只考虑判定性问题,即提出一个问题,只需要回答yes或者 no的问题。任何一般的最优化问题都可以转化为一系列判定性问题,比如求图中从A到B的最短路径,可以转化成:从A到B是否有长度为1的路径?从A到B是否有长度为2的路径?……从A到B是否有长度为k的路径?如果问到了k的时候回答了yes,则停止发问,我们可以说从A到B的最短路径就是k。

      现状:人类还未解决的问题是:是否所有的NP问题都是P类问题,即P=NP?。这就是注明的世界七大数学难题之首。它的两面分别是:

    • (1)P=NP:我们最终能够找到一些计算方法,使得NDTM(不确定性图灵机)能够快速解决的问题,在DTM(确定性图灵机)上也能够快速解决。快速的意思是“使用不超过输入字符串的多项式时间”。
    • (2)P≠NP:NP只能用NDTM快速解决,而不能用DTM快速解决。

      但是,一个总的趋势、一个大方向是有的。人们普遍认为,P=NP不成立。人们如此坚信P≠NP是有原因的,就是在研究NP问题的过程中找出了一类非常特殊的NP问题叫做NP-完全问题(Non-deterministic Polynomial Complete Problem),也即所谓的 NPC问题。正是NPC问题的存在,使人们相信P≠NP。

    (四)约化(Reduction)

      定义:如果能找到这样一个变化法则,对任意一个程序A的输入,都能按这个法则变换成程序B的输入,使两程序的输出相同,那么我们说,问题A可约化为问题B,即可以用问题B的解法解决问题A,或者说,问题A可以“变成”问题B。

      内涵:“可约化”指的是可“多项式时间”地约化(Polynomial-time Reducible),即变换输入的方法是能在多项式的时间里完成的。“约”的意思不是越来越简单,需要理解为向更复杂的情况归约,虽不严谨但更形象。

      性质:约化具有一项重要的性质:约化具有传递性。如果问题A可约化为问题B,问题B可约化为问题C,则问题A一定可约化为问题C。

      例子:一元一次方程的求解,跟二元一次方程的求解,我们知道,只要能求解二元一次方程,那就可以用二元一次方程的解法来求解一元一次方程,只需要将一元一次方程加上y,并附加一个方程y=0就可以将一元一次方程变形为一个二元一次方程,然后用二元一次方程的解法来求解这个方程。注意,这里二元一次方程的解法会比一元一次的复杂。所以我们说,只需要找到解二元一次方程的规则性解法,那就能用这个规则性解法来求解一元一次方程。

      意义:一元一次方程的求解约化成二元一次方程的求解,看上去是将问题复杂化。但是问题的应用范围也增大了,不断约化下去,我们能够不断寻找复杂度更高,但应用范围更广的算法来代替复杂度虽然低,但只能用于很小的一类问题的算法,我们会发现一个很惊人的特性,就是一定会存在一个最大的问题(“通吃”所有NP问题),而我们只需要解决了这个问题,那其下的所有问题也就解决啦!

      这种问题的存在难以置信,并且更加不可思议的是,这种问题不只一个,它有很多个,它是一类问题。这一类问题就是传说中的NPC 问题,也就是NP-完全问题。

    (五)NPC问题(NP-completeness)

      定义:NPC问题是指满足下面两个条件的问题:

    • (1)它是一个NP问题;
    • (2)所有的NP问题都可以用多项式时间约化到它。

      性质:它可以在多项式时间内求解,当且仅当所有的其他的NP完全问题也可以在多项式时间内求解。只要我们找到一个NPC问题的多项式解,所有的NP问题都可以多项式时间内约化成这个NPC问题,再用多项式时间解决,这样NP就等于P了。

      现状:NPC问题还没有找到一个多项式时间算法,因此我们就此可直观地理解,NPC问题目前没有多项式时间复杂度的有效算法,只能用指数级甚至阶乘级复杂度的搜索。现在被证明是NPC问题的还有很多,任何一个NPC问题找到了多项式算法的话所有的NP问题都可以完美解决了。因此说,正是因为NPC问题的存在,P=NP变得难以置信。

      例子1:密码学中的“素数分解”(大数分解和素性检测),就是一个NPC问题[6]。假如P=NP,密码学的工作者必须改造的工作,实在是太多了!如果P=NP,则现有的大量密文都是容易解密的。

      例子2:逻辑电路问题是第一个NPC问题。逻辑电路问题指的是这样一个问题:给定一个逻辑电路,问是否存在一种输入使输出为True。这是有严格证明的。它显然属于NP问题,并且可以直接证明所有的NP问题都可以约化到它(想想计算机内部也不过是一些0和1的运算)。

    在这里插入图片描述

      如图所示,在输入通过非门后,与源输入一起通过与门,则输出无论如何都不可能为True的逻辑电路。(“a AND NOT a”是不可满足的)

      其他例子:有了第一个NPC问题后,一大堆NPC问题就出现了,因为再证明一个新的NPC问题只需要将一个已知的NPC问题约化到它就行了。后来,Hamilton回路成了NPC问题,TSP问题(旅行商问题)也成了NPC问题。

    (六)NPH问题(NP-hard)

      定义:满足NPC问题定义的第二条但不一定要满足第一条(就是说,NP-Hard问题要比 NPC问题的范围广,但不一定是NP问题)。

      NP-Hard问题同样难以找到多项式时间复杂度的算法,但它不列入我们的研究范围,因为它不一定是NP问题。即使NPC问题发现了多项式级的算法,NP-Hard问题有可能仍然无法得到多项式级的算法。事实上,由于NP-Hard放宽了限定条件,它将有可能比所有的NPC问题的时间复杂度更高从而更难以解决。

      四个类的关系如下图所示:

    在这里插入图片描述

    三、布尔可满足性问题(Boolean Satisfiability Problem)

    (详见百度百科《布尔可满足性问题》
      背景:2010年8月7日,来自惠普实验室的科学家Vinay Deolalikar声称已经解决了“P/NP问题” ,并公开了证明文件。这就是布尔可满足性问题(Boolean Satisfiability Problem),简称SAT问题,本质上就是第一个NPC问题“逻辑电路”。

      内容:迪奥拉里卡声称已经证明,询问一组逻辑陈述是否能同时成立或者互相矛盾,其中:

    • 询问给定布尔公式的变量是否可以一致地用值TRUE或FALSE替换,公式计算结果为TRUE。如果是这种情况,公式称为可满足。
    • 另一方面,如果不存在这样的赋值,则对于所有可能的变量赋值,公式表示的函数为FALSE,并且公式不可满足。[7]

      任何程序都无法迅速解答这个问题,因此,它不是一个P问题。

      意义:如果迪奥拉里卡的答案成立,说明P问题和NP问题是不同的两类问题,这也意味着计算机处理问题的能力有限,很多任务的复杂性从根本上来说也许是无法简化的。
    对于有些NP问题,包括因数分解,P≠NP的结果并没有明确表示它们是不能被快速解答的;但对于其子集NPC问题,却注定了其无法很快得到解决。其中一个著名的例子就是旅行商问题(Travelling Salesman Problem),即寻找从一个城市到另一个城市的最短路线,答案非常容易验证,不过,如果P≠NP,就没有计算机程序可以迅速给出这个答案。

    总结

      从人类有了计算这样的概念,到图灵首次提出可计算性问题过去了上千年时间。由此拉开对于计算复杂性领域探讨的序幕:Cook-Karp、Church分别提出实际可计算,与图灵可计算;虽然是计算复杂性理论的基本问题,但仍然仅停留在猜想。对于时间复杂度的讨论,人们提出了P问题,扩展到NP问题,并规约到NPC问题,进而延伸到NPH问题,本身已经是知识的灰色地带了,而在灰色之外的Non-NP问题,人们更是一无所知。

      到如今又过去了上百年的时间。但这依然仅仅是开始,对于这一领域上,我们了解的实在是太少了。对于问题复杂性这样抽象而晦涩对象的探究实在很难一直保持清醒的思维。很多难以理解的抽象过程和概念。即使我们自以为了解了,却不一定真的能理解。似乎这些理念都像是漂浮在空中一样,没有具体的对应物,并且对于这些问题的探讨与现实中真正去实现的工程项目更是关联很远。在这样边缘的领域上,更多人仅仅是一知半解,很少有人真正涉足。

      未来,对于NP问题的研究还会继续深入。停留在形式化的逻辑推理实际上已经是举步维艰。很难,甚至是不可能做到那样“理想”和“理性”主义,实现一个NPC问题的解决方法,或是实现一个终极、通用的强人工智能。更多情况下,应该尝试理想与实践结合、理性与经验结合,就像机器学习中连接主义和符号主义竞争的那样,虽然总是一起一伏,但两者始终是势均力敌,并且在不断碰撞中演进。

    参考文献

    [1]Church, Alonzo. A set of Postulates for the Foundation of Logic. Annals of Mathematics. 1932, 33 (2): 346–366. JSTOR 1968337. doi:10.2307/1968337

    [2]Gödel, Kurt. On Undecidable Propositions of Formal Mathematical Systems. (编) Davis, M. The Undecidable. Kleene and Rosser (lecture note-takers); Institute for Advanced Study (lecture sponsor). New York: Raven Press. 1965 [1934].

    [3]Kleene, Stephen Cole. Lambda-Definability and Recursiveness. Duke Mathematical Journal. 1936, (2): 340–353.

    [4]Pour-El, M.B.; Richards, J.I. Computability in Analysis and Physics. Springer Verlag. 1989.

    [5]算法导论

    [6]COOK.S.A, The complexity of theorem proving procedures[C].Proceedings of the 3rd Annual ACM Symposium on the Theory of Computing, New York, 1971:151_158

    [7]王建新,管利娜,江国红. 可满足性问题的研究综述[J]. 计算技术与自动化,2009,28(4):138-143.doi:10.3969/j.issn.1003-6199.2009.04.036.

    展开全文
  • 计算复杂性理论综述

    2014-06-18 17:09:38
    关于计算复杂性理论相关知识的pdf文档,介绍了计算复杂性理论的发展历程及其相关技术
  • 今天偶然间碰到数学界著名的七大千禧难题,关注了P和NP问题,但是里面提到关于算法的复杂性的描述已经超出了自己的知识范围,我找到了一本书来弥补这个不足,即《计算复杂性与算法分析》,希望自己在看完这本书之后...

    今天偶然间碰到数学界著名的七大千禧难题,关注了P和NP问题,但是里面提到关于算法的复杂性的描述已经超出了自己的知识范围,我找到了一本书来弥补这个不足,即《计算复杂性与算法分析》,希望自己在看完这本书之后能够对计算复杂性有完整的概念

    首先看看它的目录

    其实大部分的知识都有接触过,但是没有形成体系

    接下来就慢慢学习吧,挖个坑一直学

    • 自动机

    以基本码为单位对输入进行计算得到输出的过程

    看了一会,发现第一章和第二章的内容与编译原理的内容相似,介绍了语法分析树,语言文法

    • 图灵机

    图灵机是比自动机应用更为广泛的一种计算模型,非确定型图灵机(NTM)的移动不能为转移函数准确地决定,它的转移函数是多值的。如果将这些函数值放在仪器形成一个子集,那么也可以把它看成一个集值函数。除此之外,NTM和DTM没有区别,就是在分析下一位的输入的时候,它的输出是不确定的

    到了第5章正式介绍计算复杂性理论

    • 不同计算模型的算法复杂性的度量的尺度时不同的,但都从不同角度描述了一个算法的安度。一个算法的复杂性是由这类问题的固有安度决定的,它在某种意义上应独立于计算它的模型,但是,当我们涉及一个具体问题时,不可避免的要谈到这个问题的所谓体积,或称大小
    • 时间复杂性

    如果一个问题的大小是n,解决这一问题的某一算法所学的时间为T(n),它是n的某一函数。T(n)称为这一算法的时间复杂性。当输入量n逐渐加大时,时间复杂性的极限情形,称为算法的渐进时间复杂性。类似地,可以定义一个算法的空间复杂性和渐进空间复杂性。在算法的复杂性讨论中,人们主要是研究算法的时间复杂性,尤感兴趣的是算法的渐进时间复杂性,而对算法渐进复杂性的讨论往往只给出它的关于问题大小n的数量级。

    • RAM程序的时空耗费标准:均匀耗费标准和对数耗费标准

    均匀耗费标准是指用每执行一条RAM指令需要一个单位时间,每个数据需要占有一个单位空间的假设来分析一个RAM程序。这样做是比较粗略的,实际计算机执行不同类型的指令所需的时间一般并不相等,同一条指令的执行时间因操作数的不同也会有不同

    对数耗费标准是由于实际的计算机字长很有限和长度固定而产生的。在RAM中,假定一个内存储单元可以存放一个任意大小的整数且任何操作都可以用一条指令完成。有时这是与实际情况不相符的,因为一个整数n在存储器里要占用log2(n)+1个单位,当这个位数超过机器字长时,不仅一个存储单元放不下它,而且有关它的运算也不可能用一条指令来完成

    • 算法复杂度分析的数学基础

    算法复杂度分析中常用的一些数学基础知识,包括集合论、逻辑学、概率论以及代数领域的知识

    • p类问题

    目前人们已经证明了一些问题,它的时间复杂性时多项式的,这只须涉及一个实现它的时间复杂性时多项式阶的算法即可,例如分类问题(有成)排序问题。这样一类问题本称为P类问题

    • 顽型问题

    还有一类问题,人们已经设计出实现它的时间复杂性为指数阶的算法,并且已证明该问题不存在时间复杂性为多项式阶的算法(例如梵塔问题),这样一类问题称为顽型问题。

    • NP问题

    由这样一类问题,人们目前已设计的实现它的算法其时间复杂性为指数阶的,但还不能肯定有没有多项式阶的算法,例如m-可着色问题 。为了研究这类问题,人们又设计一种称为非确定型图灵机的计算模型,这些问题对应一个非确定型图灵机,而且可以在多项式时间内完成计算。人们称这类问题为NP问题,NP是Nondeterministic Polynomial的缩写。

    作为一本书,还有很多内容,看完是不可能的,到此为止,有个比较清晰的概念了

     

     

     

    展开全文
  • 计算复杂性讨论

    2013-07-14 09:12:45
    数据采集抓取中计算复杂性的相关文档 对于数据抽取时的算法设计讨论
  • 计算复杂性导论》可用作计算机专业、计算数学专业的计算机理论课程的教材,也是有关研究人员不可或缺的参考书。计算复杂性理论是用数学方法研究使用数位计算机解决各种算法问题困难度的理论。《计算复杂性导论》对...
  • 可计算性与计算复杂性导引-张立昂 课本pdf图片版。
  • 张立昂的精品书籍,《可计算性与计算复杂性导引(第3版)》,第三版。
  • 货郎问题与计算复杂性
  • 算法分析与 计算复杂性理论;课程简介;课程内容;预计进度安排;教材与参考书;学习安排;引言: 理论上的可计算与现实上的可计算 ;投资问题;蛮力算法的代价; T(n) = 2 T(n?1) + 1T(1) = 1;其他问题;Algorithm + Data ...
  • 内容提要: 本书论述了形式语言的基本内容,包括有限自动机、下推机和图灵机的基础理论,讨论了如分治策略、动态规划、回溯法、贪心法以及概率算法的基本技术;同时,也给出了计算复杂性理论的基本知识。
  • 我们老师上课的课件 计算复杂性。 我们老师上课的课件 计算复杂性
  • 本书是一本全面阐述计算机复杂性理论及其近年来进展的教科书,主要包含算法图灵机、可计算性等有关计算复杂理论的基本概念;布尔逻辑、一阶逻辑、逻辑中的不可判定性等复杂性理论的基础知识;P与NP、NP完全等各复杂...
  • 可计算性与计算复杂性(吉林大学教材-李占山)
  • 本书是一本全面阐述计算机复杂性理论及其近年来进展的教科书,主要包含算法图灵机、可计算性等有关计算复杂理论的基本概念;布尔逻辑、一阶逻辑、逻辑中的不可判定性等复杂性理论的基础知识;P与NP、NP完全等各复杂...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 14,876
精华内容 5,950
关键字:

计算复杂性