网站大量收购独家精品文档,联系QQ:2885784924

[第八章NP完全问题.docVIP

  1. 1、本文档共32页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
[第八章NP完全问题

第八章 NP-完全问题 §1 关于问题及算法的描述 为了应用算法复杂性理论,首先要对问题、问题的一般描述、计算模型、算法、算法的复杂性给出严格的定义。但在给出精确定义之前,我们先回顾一下有关概念的粗略解释。 所谓一个问题(problem)是指一个有待回答、通常含有几个取值还未确定的自由变量的一个一般性提问(question)。它由两部分构成:一是对其关于参数的一般性描述;二是对该问题的答案所应满足的某些特性的说明。而一个问题的某个实例则可通过指定问题中所有参数的具体取值来得到。以下用表示某个问题,用表示其实例。 旅行商问题的参数是由所需访问城市的一个有限集合和中每对城市之间的距离所组成。它的一个解是对所给城市的一个排序 使得该排序极小化下面表达式(目标函数)的值 旅行商问题的一个实例是通过指定城市的数目,并指定每两个城市之间的具体距离而得到的。例如: , 就是旅行商问题的一个实例,这个实例的一个最优解是排序,因为四个城市的这个排序所对应旅行路线是所有可能环游路线中长度最小的,其长度为27。 目前广泛采用的描述问题的方法主要有两种:一是将任一问题转化为所谓的可行性检验问题(feasibility problem);二是把问题转化为判定问题(decision problem)。实际中几乎所有问题都可直接或间接地转述为判定问题。 判定问题是答案只有“是”与“非”两种可能的问题。一个判定问题可简单地由其所有例子的集合与答案为“是”的例子所构成的子集来刻画。不过,为了反映实际问题所具有的特性,通常所采用的描述方法由两部分组成。第一部分用诸如集合、图、函数等各种描述分量来刻画判定问题的一般性例子,以下用“例”表示这一部分;第二部分则陈述基于一般性例子所提出的一个“是非”提问,以下简称“问”。因此,一个具体例子属于当且仅当它可通过用具有特定性质的某些对象替代一般性例子的所有一般性描述分量而得到,而一个例子属于当且仅当限定于该例子时,它对所述提问的回答为“是”。 例 待访问城市的有限集合、每对城市之间的距离以及一个界。 问 在中存在一个总长不超过的、通过所有城市的旅行路线吗?也就是说,存在的一个排序,使得 这是一个将优化问题转化成判定问题的例子。一般地,一个优化问题可以看作是其所有实例的集合,而每一个实例为一个元素对,其中是可行解集,是目标函数。一个最优化问题可以提出下述三种模式: 最优化模式:求最优解; 求值模式:求出最优值; 判定模式:给定一个实例和一个整数,问是否存在一个可行解 ,使得? 显然,在求解最优值不太困难的假设下,上述三种模式的每一种都不比前一种困难。一般而且比较现实的假设是:最优值是一个整数,且这个整数或其绝对值的对数被输入长度的一个多项式所界定。在这种情况下,用二分搜索(或叫折半搜索)技术证明,只要判定模式存在多项式时间算法,求值模式也存在多项式时间算法。 所谓算法(algorithm)是指用来求解某一问题的、带有一般性的一步一步的过程。它是用来描述可在许多计算机上实现任一计算流程的抽象形式,其一般性可以超越任何具体实现时的细节。 注意,复杂性理论中对算法的定义与我们通常理解的具体算法(即用某种计算机语言编写的、可在某一特定计算机上实现的计算机程序)有所不同。不过,将算法想象为某个具体的计算机程序,在许多情况下可以帮助我们理解有关概念和理论。 附:一个算法的严格定义直到1936年才出现,丘奇(Alonzo Church)和图灵(Alan Turing)分别在他们的文章中给出。丘奇使用称为演算的记号系统来定义算法,图灵用机器(图灵机)来定义算法,后来证明两者是等价的。此前,希尔伯特的第10问题就是要设计一个算法来测试多元多项式是否有整数根。不过他不用“算法”这个词,而是用一句短语:“通过有限次运算就可以决定的过程”。我们这里采用图灵的定义,即借用图灵机计算模型来给出算法的精确定义。 到目前为止,关于算法的描述大致有三种不同的程次:一是形式描述,即详尽的写出图灵机的状态、转移函数等等,这是最底层也最详细的描述;二是实现描述,使用日常语言来描述图灵机的运行,如怎样移动读写头,怎样在带上存储数据等,但是不给出状态和转移函数的细节;三是高层的描述,它也使用日常语言来描述算法,但是忽略实现的模型,这种描述不需要提及机器是怎样管理它的带子或读写头的。 称一个算法求解一个问题,是指该算法可以应用到的任一实例,并保证能找到该实例的一个解。一个算法的有效性可以用执行该算法所需要的各种计算资源的量来度量。最典型也是最主要的两个资源就是所需要的时间和内存空间。但时间需求常常是决定某一特定算法在实际中是否真正有用和

文档评论(0)

tt859685 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档