- 1、本文档共20页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第10章 NP完全问题
* 10.1 引言 10.2 P类 10.3 NP类 10.4 NP完全问题 10.5 co-NP类(略) 10.6 NPI类(略) 10.7 四种类之间的关系(略) 1.引言 在前面的各章中,我们对一些算法的设计和分析进行了讨论,这些算法的运行时间可用低次多项式来表示(例二次)。在这一章,我们将注意力集中在这样一类问题,这些问题至今没有找到有效算法,而且今后也有可能证明得知:它们无有效算法。 设П是任意问题,如果对问题存在一个算法,它的时间复杂性是O(nk),其中n是输入大小,k是非负整数,我们说问题П存在多项式时间算法。现实世界的许多问题并不属于这个范畴,因为求解这些问题需用指数(2n)或超指数(n!)来表示。 本章将研究难解问题的一个子类,通常称为NP完全问题(NPC问题)。这一类问题目前约有3000多个,其中还包括数百个著名问题。它们有一个共同特性,如果它们中的一个是多项式可解的话,那么所有其它问题也是多项式可解的。现存的求解这些问题算法的运行时间,对于中等大小的输入也要用几百或几千年的时间。 易求解问题: 存在多项式时间算法。 难解问题: (到目前为止)不存在多项式时间算法。 2.判定问题 为了研究问题的复杂性,我们必须将问题抽象。为了简化问题,我们只考虑一类简单的问题,称为“判定性问题”。也就是说提出一个问题,只需要回答Yes/No的问题。任何一般的最优化问题都可以转化为一系列判定性问题。 例如求图中从A到B的最短路径,该问题可以转化成如下形式: 从A到B是否有长度为1的最短路径? No 从A到B是否有长度为2的最短路径? No …………………………………? No 从A到B是否有长度为k-1的最短路径? No 从A到B是否有长度为k的最短路径? Yes 如果问到了k的时候,回答了Yes,则停止发问。我们可以说:从A到B的最短路径长度为k。 3.确定性算法 定义10.1(P176) 设A是求解问题П的一个算法。如果在展示问题П的一个实例时,在整个执行过程中每一步都只有一种选择,则称A是确定性算法。 所以对于同样的输入,实例一遍又一遍地执行,它的输出从不改变。在前面各章所讨论的所有算法都是确定性的。 例1:算法表达式的计算(5+3*8-9) 例2:选择排序法 问题:哈密顿回路 给出一个无向图G=(V,E),它有哈密顿回路吗?即在图中是否存在一条恰好访问每个顶点一次的回路。 可以用穷举法来求解,一条回路一条回路检查下去,最终便能得到结果。但是穷举法的算法复杂性是指数级的,计算时间随问题规模成指数型增长,很快就变得不可计算了,所以确定性算法对此类问题无效。 4.P类 定义10.2(P176) 判定问题的P类由这样的判定问题组成,它们的Yes/No解可以用确定性算法在多项式时间内得到。例如在O(nk)内得到,其中k是非负整数,n是输入实例的大小。 例1:给出一个有n个整数的表,它们是否按降序排列? 答:只要检查表中相邻二个数即可,运行时间为O(n)。 例2:给出二个整数集合,它们的交集是否为空? 答:因集合中无重复元素,先将所有整数排序,然后检查相邻二数是否相等,显然运行时间为 O(nlog2n)。 5.非确定性算法 有些计算问题是确定性的,例如“加减乘除”,你只要按照公式推导,按部就班一步步进行,就可以得到结果。但是有些问题无法按部就班直接进行计算的,例如 “找大质数”的问题。已知目前最大质数,那么下一个大质数应该是多少呢?有没有一个公式可以一步步推算出来,显然这样的公式是没有的。 这种问题的答案,是无法直接计算得到的,只能通过“猜算”来得到结果,这也就是非确定性问题。这些问题通常有个算法,它不能直接告诉你答案是什么,但可以告诉你,某个可能的结果是正确的答案、还是错误的。这个可以告诉你“猜算”的答案正确与否的算法,称为非确定性算法。假如“猜算”可以在多项式时间内得到,那么该问题称作“多项式非确定性问题”。 非确定性算法定义(P177) 对于输入x,一个不确定算法由猜测和验证二个阶段组成。 ⑴猜测阶段 在这个阶段产生一个任意字符串y,它可能是对应输入实例x的一个解,也可能不是一个解,甚至不是解的合适形式,也可能在不确定算法的不同次运行中不同。在此阶段,仅仅要求在多项式时间内(O(ni),n=|x|)产生串y。对于许多问题,这个阶段可以在线性时间内完成。 ⑵验证阶段 检查产生串y是否是解的合适形式,若不是,则算法停下来回答No。 若产生串y是解的合适形式,则继续检查y是否是问题实例x的解。若是,则算法停下来回答Yes;若不是,则算法停下来
您可能关注的文档
- 第 1 讲 三角函数的概念.ppt
- 第 6 讲 简单的三角恒等变换.ppt
- 第 6 节 微分中值定理.ppt
- 第 2 章 图论基础.ppt
- 第 7 章 进化博弈论简介.ppt
- 第+7+章+++方差分析与实验设计.ppt
- 第01章 关系数据库基础.ppt
- 第01章 向量代数与空间解析几何.ppt
- 第01章 数据存储.ppt
- 第01章 质点运动学.ppt
- 数据仓库:Redshift:Redshift与BI工具集成.docx
- 数据仓库:Redshift:数据仓库原理与设计.docx
- 数据仓库:Snowflake:数据仓库成本控制与Snowflake定价策略.docx
- 大数据基础:大数据概述:大数据处理框架MapReduce.docx
- 实时计算:GoogleDataflow服务架构解析.docx
- 分布式存储系统:HDFS与MapReduce集成教程.docx
- 实时计算:Azure Stream Analytics:数据流窗口与聚合操作.docx
- 实时计算:Kafka Streams:Kafka Streams架构与原理.docx
- 实时计算:Kafka Streams:Kafka Streams连接器开发与使用.docx
- 数据仓库:BigQuery:BigQuery数据分区与索引优化.docx
文档评论(0)