- 1、本文档共13页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第五部分 计算复杂性导引
到现在,在我们讨论决策问题时,我们只考虑问题是否具有可解的性质。在现实生活中,用于解决问题的计算资源是有限的:可获得的时间和空间都是有限的。结果,一些可解的问题的中等规模的实例在实际中都变得很难以解决。在第5部分,我们考虑鉴别难解问题的方法,主要通过描述解决问题的一定规模的实例时,所需要的时间和内存的数量。虽然,强调的重点是运行时间,我们也给出有关空间的基本定义,并提到涉及空间的最基本的结果。
在第14章,我们首先引入涉及增长率的记号和术语,这允许我们在后面章节以合理的方式讨论象“多少时间?”这样的问题。我们把这些数量问题与我们特定的计算模型相联系,然后讨论一些基本的复杂类。这也是根据问题和语言内在的复杂性对它们分类的方法。
为了区分易解问题和难解问题(注意,前面我们讨论的可解问题和无解问题),正如我们将在第15章讨论的,常用的标准是在图林机上是多项式时间可解的。根据这个标准,许多问题是易解的,也有些问题是难解的。我们可以修改第12章的规约技术得到这两类问题的例子。也许更有趣的问题是根据这个标准,至今仍然无法判断的一些问题,没有人发现这些问题的多项式时间解决方法,但是也没有人能够证明不存在多项式时间解决方法。NP完全的概念就是接近这个主题的一个方法。在第15章的最后两节,我们给出可满足问题的NP完全性的cook证明和一些通过多项式时间规约被证明是NP完全的组合问题的例子。
测度和复杂性分类
函数的增长率
计算问题的复杂性能够通过固定的计算模型来讨论,主要考虑为了解决这个问题,需要多少机器的资源(通常指时间和空间)。为了对两个问题内在复杂性进行有意义的比较,有必要考察一定范围内的实例的解决情况。如果我们把运行时间作为标准,比如,最常用的方法是比较两个运行时间的增长率,每个运行时间都看成是实例规模的函数。我们引入一些处理运行时间的数量的增长率的定义和记号。我们从一个比较4个简单函数的例子开始。
例子14.1 我们考虑函数
p1(n)=2n2
p2(n)=n2+3n+7
P3(n)=n3
q(n)=2n
表14.1显示了这4个函数对应部分变量取值n的各自的函数值,这些函数值很清楚显示了每个函数的增长趋势。对于比较小的值n,p2(n)的值远远大于p1(n),但是当n=1000时,p2(n)中低阶的项3n+7变得相对可忽略了,而p1中的因子2几乎完全决定了p1和p2之间的差别。p3是更高阶的多项式,尽管没有额外的因子和低阶项,但是它的值的增长速度比前两个函数都要快很多。
更惊人的增长趋势体现在第4个指数函数q上。我们再次看到对于最前面的几个小数值没有什么特别的地方,但是对于n=10之后的数值,它就比其他3个函数值都要大了,当n=1000时,p3(n)是1百万,而q(n)则是难以想象地大了。如果表中数据的单位是纳秒(nanosecond,又译毫微秒,一秒的10亿分之一),那么p3(1000)表示1秒,而q(1000)表示超过3*10282世纪。
加入表14.1
表14.1展示了不同增长率的效果,p1和p2有不同的规模,主要是因为p1的因子2,但是它们的增长率是一致的。立方多项式的增长率更大一些,但是这三个多项式的增长率都远远小于指数函数。一旦我们有了能够精确描述增长率的定义,其中一个我们感兴趣的主要区别将是多项式增长率和指数增长率之间的区别。这个例子显示的许多明显的特征将体现在定义中。
定义14.1 如果f,g: N(N是部分函数,每个函数除了在有限个点外,其他值都是有定义的。如果存在常量C和n0,使得对于每个n=n0,f(n)和g(n)都是有定义的,且f(n)=Cg(n),那么我们写
f(n)=O(g(n))(或者简单地, f=O(g))
如果对于每个正常数C,存在一个常量n0,使得对于每个n=n0,都有f(n)=Cg(n),那么我们写
f(n)=o(g(n))(或者简单地,f=o(g))
最后,如果f=O(g)且g=O(f),则写成
f=((g)
语句f=O(g),f=o(g)和f=((g)分别读着“f是g的大O”,“f是g的小o”和“f是g的大(”。所有这些语句可以用比率f(n)/g(n)来重新描述,假设g(n)最终会大于0。说f=o(g)意味着当n趋于无穷大时,这个比率的极限为0,而f=O(g)表示这个极限是有界的,而f=((g),如果两个函数都最终是非0的,则表示f/g和g/f的极限值都是有界的,即f/g的极限值介于两个固定的正数之间。如果f=O(g)不成立,则写成f(O(g),类似地,得到另外两个不成立的表示法。f(O(g)意味着不存在常数C,使得对于所有的n的大值,f(n)=Cg(n),换句话说,比率f(n)/g(n)是无界的。
一个语句,比如f=O(g),描述了两个函数的关系,它不
文档评论(0)