《计算复杂性:现代方法》——2.7 深入理解P、NP及其他复杂性类

2.7 深入理解P、NP及其他复杂性类

2.7.1 NP的哲学意义

2.7.2 NP与数学证明

2.7.3 如果P=NP会怎样

如果P=NP——具体地讲,如果像3SAT这样的一个NP完全问题存在二次时间的高效算法——则世界很可能会变成一个计算乌托邦。数学家将会被高效的证明发现程序取代(该事实在哥德尔1956年的信中就曾被指出,并且20年后又重新被指出)。一般而言,对于答案能够被高效地验证(或正确性具有短证明)的任何搜索问题,我们将能够在多项式时间内高效地找到答案或短证明。人工智能(AI)软件将变得非常完美,因为对大型概率树的穷举搜索将很容易完成。发明家和工程师将可以借助各种软件包来为当前任务设计出完美的零部件。超大规模集成(VLSI)工程师将能够采用耗电量最小的最佳电路。58一旦科学家获得了一些实验数据,她将能够自动地找出解释这些实验数据的最简理论(对最简性需要选用合理的度量);根据奥卡姆剃刀(Occam’s Razor)原理,最简单的解释很可能是正确的。然而,在某些情况下,科学家花费了几百年才找到解释已知实验数据的最简理论。这种方法也可以用来处理非科学问题。比如,可以从纽约《时代》杂志的最佳销售商列表中找出一个能够解释该列表的最简理论。(当然,找到“最简”的正确定义本身甚至就需要在人工智能和自然语言理解方面有所突破,以便NP算法能够在这两个领域中使用。)所有这些应用均是第5章将要研究的多项式分层的结果(找出最简“理论”的问题与第5章研究的MIN-EQ-DNF问题密切相关)。

有趣的是,计算乌托邦不需要考虑随机性。正如我们将看到的那样,如果P=NP,则在确定型算法中引入随机性并不能获得效率的提高,参见第7章。(这一点值得哲学家们深思。)

计算乌托邦需要付出的代价是:数字领域中不再存在隐私。任何加密方案均存在平凡的解码算法。数字货币、安全套接层(SSL)、公钥密码体系(RSA)和完美隐私(PGP)都将不存在(参见第9章)。这样,大家就必须学会在没有这些隐私保护机制下如何与人相处。

计算乌托邦显得很荒谬,然而我们却无法排除它存在的可能性。这一事实表明人类对计算的认识还少得可怜。从半全杯(half-full cup)的观点看,还存在大量精彩的事情有待发现。

2.7.4 如果NP=coNP会怎样


2.7.5 NP和NP完全之间存在其他复杂性类吗

2.7.6 NP难的处理


2.7.7 更精细的时间复杂性

本章学习内容

●类NP由成员资格存在多项式时间验证算法的所有语言构成。它包含了许多已知不属于P的重要问题。NP也可以用非确定型图灵机来定义。
●NP-完全问题是NP中最难的问题,其确切含义是,NP-完全问题存在多项式时间算法当且仅当P=NP。与图灵机似乎毫无关系的许多自然的问题已被证明是NP完全的。3SAT语言就是这样的例子,它由可满足的所有3CNF布尔公式构成。
●如果P=NP,则解能够被高效验证的任何搜索问题也能够被高效地求解。
●类coNP是由所有NP语言的补集构成的集合。人们相信coNP≠NP,它是一个比P≠NP还强的假设。

本章注记和历史



时间: 2024-09-23 15:00:56

《计算复杂性:现代方法》——2.7 深入理解P、NP及其他复杂性类的相关文章

对xmlHttp对象方法和属性的理解_基础知识

1  客户端可以通过xmlHttp对象(MSXML2.XMLHTTP.3.0)向http服务器发送请求并使用文档对象模型(DOM)处理回应. 1.1 我的理解: 用户的每次操作,都会有数据产生. 通过DOM或者JS编写对数据进行封装,或者浏览器自身对http协议的一些数据进行封装. 通过xmlHttp对象的一些方法,传入数据参数,向http服务器发送请求. 返回结果通过DOM进行处理. 2  xmlHttp对象的成员. 2.1 属性 onreadystatechange:当readyState属

《威胁建模:设计和交付更安全的软件》——第3章 STRIDE方法3.1 理解STRIDE方法及其为何有用

第3章 STRIDE方法 正如你在第1章中学到的,STRIDE是几个单词的首字母缩写:假冒.篡改.否认.信息泄露.拒绝服务.权限提升.此方法是由Loren Kohnfelder和Praerit Garg(Kohnfelder,1999)提出的,STRIDE框架及助记符旨在帮助软件开发人员识别其开发的软件中可能会遭受的各种攻击.思考威胁的方法有很多不同的标签:寻找威胁.威胁枚举.威胁分析.威胁启发.威胁发现.每一个标签所对应的方法略有不同.如果是问,威胁是存在于软件还是图表中?那么你是在寻找威胁.

《计算复杂性:现代方法》——导读

前 言 计算复杂性理论在过去三十多年中发展迅速.自1990年以来取得的出人意料的结果和基础性的结果本身就可以写出一部书.这些结果涉及的领域非常广泛,包括:经典复杂性类的概率型新定义(IP=PSPACE和各种PCP定理)以及它们在近似算法中的应用,肖尔(Shor)为量子计算机设计的整数因数分解算法,对人们目前处理著名的P?=NP问题 译文用"P?=NP"来表示原文中的"P versus NP".--译者注的各种方法为什么未能获得成功的理解,去随机化理论和基于计算难

如何理解java中 对象.this方法 还有 类.this.方法的 意义

问题描述 如何理解java中 对象.this方法 还有 类.this.方法的 意义 如何理解java中 对象.this方法 还有 类.this.方法的 意义 有没有这两种语法规则呢 解决方案 this.方法是在某个对象的实例方法内,this代表当前实例.一般情况下不用写,除非它和参数重名才需要: class A { int a; int b; public void seta(int a) { this.a = a; //因为参数a和成员变量a都叫a,所以需要区分. b = a; //相当于th

《用户至上:用户研究方法与实践》研究之前:先理解目标用户

研究之前:先理解目标用户 2.1 概述 当着手开展一个新项目时,你的第一要务通常是了解产品(如果已经存在)及其涉及的领域和目标用户.在项目初期尽可能多地理顺现有产品和其领域知识.竞争对手和客户至关重要,这会使你不必花费时间来创建已有的知识.你可以从一系列渠道获得这些重要的信息:试用自己的产品,聆听客户反馈,社会情感分析,日志文件和网络分析,与市场部门交流,竞品分析,或是从极客用户或合作伙伴获得反馈.此外,你需要评估现阶段对于用户的理解,并开始创建用户画像.这些信息将帮助你选择合适的用户研究方法来

java-如何理解一个方法的参数为内嵌类

问题描述 如何理解一个方法的参数为内嵌类 如何理解一个方法的参数为内嵌类,能否举个例子,谢谢 解决方案 ListView控件里面有一个ListItem代表条目的内嵌类.ListView有一个add方法允许你添加条目到ListView中. 解决方案二: 比如 class ListView { class ListItem { } public void add(ListView.ListItem item) { ... } } 解决方案三: Bitmap类getPixels()方法中参数strid

颜色的选择原理及方法

高光,中间调,暗部和颜色的选择原理及方法分析, 制作精准的选区,只对想要调整的区域进行调整,而不影响其他区域,是高质量和高效率完成后期调整的重要一步.通过这段时间的学习,把各地方搜罗来的方法结合自己的理解做了这个简单教程,我想这一定是初学者最想了解和知道的.现在很多的调色教程里都有各种通道的计算,有的DX也不说这是为什么,往往搞的初学者一头雾水,不能很好的理解消化,其实他们用计算的目的一部分就是在做选区.做这个简单的教程的目的就是希望能对初学者以启迪(老手们可以一掠而过,呵呵),同时也能得到大家

《深入理解Nginx》阅读与实践(三)

使用upstream和subrequest访问第三方服务 一.upstream:以向nginx服务器的请求转化为向google服务器的搜索请求为例(一)模块框架 首先要明确的是,这里是编写一个使用upstream的模块,而不是编写upstream模块.因此,和HelloWorld类似,模块结构体ngx_http_mytest_module.模块上下文结构体ngx_http_mytest_module_ctx.数组ngx_http_mytest_command[].方法ngx_http_mytes

在Linux系统中存储设备的两种表示方法

摘要: 硬盘和硬盘分区在Linux都表示为设备,按我们通俗的说法来说,就是怎么来表示或描述硬盘和或硬盘分区,但这种描述应该是科学和具体的:比如IDE硬盘,在Linux 可以表示为 /dev/hda./dev/hdb ... :SCSI 接口的硬盘.SATA接口的硬盘表示为/dev/sda./dev/sdb ... ... :而IDE接口的硬盘/dev/hda,也可以表示为hd0 ,而 SCSI 接口的如果是 /dev/sda ,另一种表示方法是sd0: 理解两种表示方法有何用?至少GRUB引导管