CMP设计分享 http://blog.sciencenet.cn/u/accsys 没有逆向思维就没有科技原创。 不自信是科技创新的大敌。

博文

多项式时间复杂度和指数时间复杂度相差多少?

已有 11262 次阅读 2016-12-1 09:00 |个人分类:P/NP问题|系统分类:科研笔记| 多项式时间, 指数时间

多项式时间复杂度和指数时间复杂度相差多少?

姜咏江

    如果以问题条件中对象数量n做为考察标准,随着n的增大,什么样的算法耗时增长速度快?这就是解题当中的时间复杂度问题。同一个问题,寻找耗时增长速度最慢的算法,无疑具有十分重要的意义。

    从数学知识知道,一次函数y=an+b随着n的变大,y的增长速度是不变的。还知道,k和c是大于1的正常整数时,y=a0n0+ a1n1+ ...+aknkz=a0c0+ a1c1+ ...+an-1cn-1+ankn比较,当n大到一定程度后,z的增长速度要比y快得多。y的表达式称为多项式型,z的表达式称为指数型。

    在计算机编程的算法中,如果对n的重复操作是可以用多项式型计算,避开指数型无疑是人们所希望的。在计算机中对n的重复操作是可以用多项式型计算就是多项式时间复杂度O(nk),用指数型计算的过程,就是指数时间复杂度O(cn)。有许多实际问题,人们只是找到了指数型的算法,没有找到多项式型算法。对于后者能否找到多项式型算法的研究成为了世界难题,这就是PNP问题。

    指数型最简单的是z=2n。我这里就举求集合子集的例子,来说明这两者的关系。

A. n个元素集合的全部子集数。

用元素添加法知,包括空集有Cn0+Cn1+...+Cnn=2n.

B. n个元素集合的不超过3个元素的子集数。

包括空集有Cn0+Cn1+...+Cn3.

    由此可见多项式型和指数型之间的关系。多项式型的幂指数一定是不超过一个常数,这是二者区别的关键。在n增大的时侯,k是不能够也跟着n增大。很多人混淆了这种约定,因而陷入了无法自拔的境地。

    不可否认,多项式型在k相当大的时侯,随着n的增大,用计算机计算仍然耗时庞大,但与指数型最小的2n比起来也会是“小巫见大巫”。

 

证明Cn0+Cn1+...+Cnn=2n如下:

添右定理n元集合用添右组合法得到全部非空子集为2n-1个。

    这个定理需要证明全部非空子集不少,且都不相同。

    这里用归纳法来证明。

n=2,那么A=a1,a2},则A的转移组合得到的子集为{a1}{a2}{a1,a2}子集数为22-1=3说明子集数正好且不重复。

n=k时得到的子集{a1}{a2...a1,a2,...,ak}满足条件子集数为2k-1,且不重复。那么当n=k+1时,则除添加子集{ak+1}之外,需要将n=k时得到2k-1个子集全部添加ak+1,形成的全部子集为

a1}{a2...ak}{ak+1...a1,a2,...,ak}{a1,a2,...,ak,ak+1

子集总数应为2k-1+2k=2×2k-1=2k+1-1,说明子集总数正确。

假设n=k+1时出现了重复子集,不妨设有子集Bi=Bjij,它们之中都包含ak+1。那么将ak+1从它们之中取出,则应有Biak+1=Bjak+1},这与n=k时得到的子集不重复子集矛盾。故没有重复子集产生。

证毕。

 

2016-12-1

 

 

 



https://blog.sciencenet.cn/blog-340399-1017961.html

上一篇:什么样的人可以称为大师?
下一篇:振奋!每个华人一看就会做这个世界难题
收藏 IP: 120.52.94.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-12-22 16:54

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部