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

博文

算法多项式时间复杂度不靠谱的证明

已有 6365 次阅读 2015-6-16 07:18 |个人分类:科研讨论|系统分类:科研笔记| 算法时间复杂度, 幂多项式

算法多项式时间复杂度不靠谱的证明

姜咏江

   可笑的是算法时间复杂度的所谓多项式时间O(nk),说k是常量,n是变量,nk叫多项式。在算法时间复杂度又说cn是指数型,c是常数,n是变量。O(nk)O(cn)是两种不同的时间复杂度。

   算法理论中的多项式为P=,其中ai是系数,k是确定的正整数,n是整型变量。我们知道,任何一个整数n都可以表示成n = 的形式,其中bj是十进制数码。由于两个多项式的算数运算结果仍然是多项式,于是有

P=。这样变化之后,P的各项都变成了指数形式,最高项为aknk= akbmk10mk

例如,n=100+3×10mP=5n+n2,则有

P = 5(1+3×10m)+ (1+3×10m)2

= 5+15×10m+1+6×10m+9×102m

= 6+21×10m+9×102m

最高阶项n2变成了9×102m

   依据算法时间复杂度所说:“不包括这个函数的低阶项和首项系数”,那么经过变换就有O(nk) = O(10mk),其中m是依据变量n而变化的变量,故而mk也是变量,并且当n趋于无穷大时,mk也趋于无穷大。不妨令y=mk,于是有

O(nk)= O(10y)。这就是说,用大O表示的所谓多项式时间也是指数时间!

   其实算法程序执行时间可以用这样的幂多项式计算,一般所说的那种指数为常量的表达只是一种形式,它可以转化成指数为变量的一种表达方式,这两种表达方式无疑是等价的。然而若“掐头去尾”用最高指数项去替代,这种等价性就丧失了。

   通过以上的等式变化足可以说明,所谓用大O表示的算法时间复杂度是不靠谱的方法,在概念上存在问题。

   用大O表示的算法时间复杂度是不靠谱的关键,就是计量时所说的“不包括这个函数的低阶项和首项系数”,这是产生误差的关键所在。因而研究算法时间复杂度必需考虑算法程序执行时间的全部。

   有关这方面的问题,我已经在博文http://blog.sciencenet.cn/blog-340399-887347.html

http://blog.sciencenet.cn/blog-340399-861142.html中有初步阐述。不久会全面整理供有心研究P/NP者共同讨论。

 

2015-6-16

 



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

上一篇:算法时间复杂度的批驳
下一篇:The proof of time complexity of the algorithm is not reliabl
收藏 IP: 114.111.167.*| 热度|

2 陈楷翰 dulizhi95

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

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

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

GMT+8, 2024-5-20 03:02

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部