族谱网 头条 人物百科

时间复杂度

2020-10-16
出处:族谱网
作者:阿族小谱
浏览:249
转发:0
评论:0
常见时间复杂度列表以下表格统整了一些常用的时间复杂度类别。表中,poly(x)=x,也就是x的多项式。常数时间若对于一个算法,T(n){displaystyleT(n)}的上

常见时间复杂度列表

以下表格统整了一些常用的时间复杂度类别。表中,poly(x) = x,也就是 x 的多项式。

常数时间

若对于一个算法, T ( n ) {\displaystyle T(n)} 的上界与输入大小无关,则称其具有常数时间,记作 O ( 1 ) {\displaystyle O(1)} 时间。一个例子是访问数组中的单个元素,因为访问它只需要一条指令。但是,找到无序数组中的最小元素则不是,因为这需要遍历所有元素来找出最小值。这是一项线性时间的操作,或称 O ( n ) {\displaystyle O(n)} 时间。但如果预先知道元素的数量并假设数量保持不变,则该操作也可被称为具有常数时间。

虽然被称为“常数时间”,运行时间本身并不必须与问题规模无关,但它的上界必须是与问题规模无关的确定值。举例,“如果a > b则交换a、b的值”这项操作,尽管具体时间会取决于条件“a > b”是否满足,但它依然是常数时间,因为存在一个常量t使得所需时间总不超过t。

以下是一个常数时间的代码片段:

如果 T ( n ) = O ( c ) {\displaystyle T(n)=O(c)} ,其中 c {\displaystyle c} 是一个常数,这记法等价于标准记法 T ( n ) = O ( 1 ) {\displaystyle T(n)=O(1)} 。

对数时间

若算法的T(n) = O(log n),则称其具有对数时间。由于计算机使用二进制的记数系统,对数常常以2为底(即log2n,有时写作lg n)。然而,由对数的换底公式,logan和logbn只有一个常数因子不同,这个因子在大O记法中被丢弃。因此记作O(log n),而不论对数的底是多少,是对数时间算法的标准记法。

常见的具有对数时间的算法有二叉树的相关操作和二分搜索。

对数时间的算法是非常有效的,因为每增加一个输入,其所需要的额外计算时间会变小。

递归地将字符串砍半并且输出是这个类别函数的一个简单例子。它需要O(log n)的时间因为每次输出之前我们都将字符串砍半。 这意味着,如果我们想增加输出的次数,我们需要将字符串长度加倍。

// 递归输出一个字符串的右半部分varright=function(str){varlength=str.length;// 辅助函数varhelp=function(index){// 递归情况:输出右半部分if(index<length){// 输出从index到数组末尾的部分console.log(str.substring(index,length));// 递归调用:调用辅助函数,将右半部分作为参数传入help(Math.ceil((length+index)/2));}// 基本情况:什么也不做}help(0);}

幂对数时间

对于某个常数k,若算法的T(n) = O((log n)),则称其具有幂对数时间。例如,矩阵链排序可以通过一个PRAM模型.被在幂对数时间内解决。

次线性时间

对于一个算法,若其匹配T(n) = o(n),则其时间复杂度为次线性时间(sub-linear time或sublinear time)。实际上除了匹配以上定义的算法,其他一些算法也拥有次线性时间的时间复杂度。例如有O(n) 葛罗佛搜索(英语:Grover"s algorithm)算法。

常见的非合次线性时间算法都采用了诸如平行处理(就像NC1 matrix行列式计算那样)、非古典处理(英语:Quantum algorithm)(如同葛罗佛搜索那样),又或者选择性地对有保证的输入结构作出假设(如幂对数时间的二分搜索)。不过,一些情况,例如在头 log(n) 比特中每个字符串有一个比特作为索引的字符串组就可能依赖于输入的每个比特,但又匹配次线性时间的条件。

“次线性时间算法”通常指那些不匹配前一段的描述的算法。它们通常运行于传统电脑架构系列并且不容许任何对输入的事先假设。但是它们可以是随机化算法,而且必须是真随机算法除了特殊情况。

线性时间

如果一个算法的时间复杂度为O(n),则称这个算法具有线性时间,或O(n)时间。非正式地说,这意味着对于足够大的输入,运行时间增加的大小与输入成线性关系。例如,一个计算列表所有元素的和的程序,需要的时间与列表的长度成正比。这个描述是稍微不准确的,因为运行时间可能显著偏离一个精确的比例,尤其是对于较小的n。

线性对数(准线性)时间

若一个算法时间复杂度T(n) = O(nlog n),则称这个算法具有线性对数时间。因此,从其表达式我们也可以看到,线性对数时间增长得比线性时间要快,但是对于任何含有n,且n的幂指数大于1的多项式时间来说,线性对数时间却增长得慢。

多项式时间

强多项式时间与弱多项式时间

复杂度类

从多项式时间的概念出发,在计算复杂度理论中可以得到一些复杂度类。以下是一些重要的例子。

P:包含可以使用确定型图灵机在多项式时间内解决的决定性问题。

:包含可以使用非确定型图灵机在多项式时间内解决的决定性问题。

ZPP:包含可以使用概率图灵机在多项式时间内零错误解决的决定性问题。

RP:包含可以使用概率图灵机在多项式时间内解决的决定性问题,但它给出的两种答案中(是或否)只有一种答案是一定正确的,另一种则有几率不正确。

BPP:包含可以使用概率图灵机在多项式时间内解决的决定性问题,它给出的答案有错误的概率在某个小于0.5的常数之内。

BQP:包含可以使用量子图灵机在多项式时间内解决的决定性问题,它给出的答案有错误的概率在某个小于0.5的常数之内。

在机器模型可变的情况下,P在确定性机器上是最小的时间复杂度类。例如,将单带图灵机换成多带图灵机可以使算法运行速度以二次阶提升,但所有具有多项式时间的算法依然会以多项式时间运行。一种特定的抽象机器会有自己特定的复杂度类分类。

超越多项式(superpolynomial)时间

如果一个算法的时间 T(n) 没有任何多项式上界,则称这个算法具有超越多项式时间。在这种情况下,对于所有常数 c 我们都有 T(n) = ω(n),其中 n 是输入参数,通常是输入的数据量(比特数)。指数时间显然属于超越多项式时间,但是有些算法仅仅是很弱的超越多项式算法。例如,Adleman-Pomerance-Rumely 质数测试(英语:Adleman–Pomerance–Rumely primality test)对于 n 比特的输入需要运行 n 时间;对于足够大的 n,这时间比任何多项式都快;但是输入要大得不切实际,时间才能真正超过低级的多项式。

准多项式时间

准多项式时间算法是运算慢于多项式时间的算法,但不会像指数时间那么慢。对一些固定的 c > 0 {\displaystyle c>0} ,准多项式时间算法的最坏情况运行时间是 2 O ( ( log ⁡ ⁡ --> n ) c ) {\displaystyle 2^{O((\log n)^{c})}} 。如果准多项式时间算法定义中的常数“c”等于1,则得到多项式时间算法;如果小于1,则得到一个次线性时间算法。

次指数时间

术语次指数时间用于表示某些算法的运算时间可能比任何多项式增长得快,但仍明显小于指数。在这种状况下,具有次指数时间算法的问题比那些仅具有指数算法的问题更容易处理。“次指数”的确切定义并没有得到普遍的认同,我们列出了以下两个最广泛使用的。

第一定义

如果一个问题解决的运算时间的对数值比任何多项式增长得慢,则可以称其为次指数时间。更准确地说,如果对于每个 ε> 0,存在一个能于时间 O(2) 内解决问题的算法,则该问题为次指数时间。所有这些问题的集合是复杂性SUBEXP,可以按照DTIME的方式定义如下。

第二定义

一些作者将次指数时间定义为 2 的运算时间。该定义允许比次指数时间的第一个定义更多的运算时间。这种次指数时间算法的一个例子,是用于整数因式分解的最著名古典算法——普通数域筛选法,其运算时间约为 2 O ~ ~ --> ( n 1 / 3 ) {\displaystyle 2^{{\tilde {O}}(n^{1/3})}} ,其中输入的长度为 n。另一个例子是图形同构问题(英语:Graph isomorphism problem)的最著名算法,其运算时间为 2 O ( n log ⁡ ⁡ --> n ) {\displaystyle 2^{O({\sqrt {n\log n}})}} 。

指数时间

若T(n) 是以 2为上界,其中 poly(n) 是 n 的多项式,则算法被称为指数时间。更正规的讲法是:若 T(n) 对某些常数 k是由 O(2) 所界定,则算法被称为指数时间。在确定性图灵机上认定为指数时间算法的问题,形成称为EXP的复杂性级别。

有时侯,指数时间用来指称具有 T(n) = 2 的算法,其中指数最多为 n 的线性函数。这引起复杂性档次 E。

双重指数时间

若 T(n) 是以 2 为上界,其中 poly(n) 是 n 的多项式,则算法被称为双重指数时间。这种算法属于复杂性档次2-EXPTIME。

众所周知的双重指数时间算法包括:

预膨胀算术(英语:Presburger arithmetic)的决策程序

计算葛洛拿基底(英语:Gröbner basis)(在最差状况)

实封闭体的量词消去至少耗费双重指数时间,而且可以在这样的时间内完成。

参见

L-notation


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱
发表评论
写好了,提交
{{item.label}}
{{commentTotal}}条评论
{{item.userName}}
发布时间:{{item.time}}
{{item.content}}
回复
举报
点击加载更多
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回

更多文章

更多精彩文章
打赏
私信

推荐阅读

· 时间
丈量与记录计时仪器中国古代的计时仪器有太阳钟和机械钟两类。太阳钟是以太阳的投影和方位来计时,分别以土圭、圭表、日晷为代表。由于地球轨道偏心率以及地球倾角的影响,真太阳时和平太阳时是不一致的,机械钟应运而生,代表有水钟、香篆钟、沙漏.太阳仪.单位时间的基本国际单位是秒。它现在以铯133原子基态的两个超精细能级间跃迁对应的辐射的9,192,631,770个周期的持续时间为标准。物理学位于塔干洛的水平日晷目前最广泛被接受关于时间的物理理论是阿尔伯特·爱因斯坦的相对论。在相对论中,时间与空间一起组成四维时空,构成宇宙的基本结构。时间与空间都不是绝对的,观察者在不同的相对速度或不同时空结构的测量点,所测量到时间的流易是不同的。狭义相对论预测一个具有相对运动的时钟之时间流易比另一个静止的时钟之时间流易慢。在1971年,物理学家哈菲尔(JoeHafele)与基廷(RichardKeating)做了证明。...
· 时间领主
历史时间领主们在早期历史中有一名叫Omega的科学家,他发明了可以控制时间能量来进行时间旅行的手段。在终末时间之战(英语:TimeWar)时,时间领主们与他们的母星Gallifrey被毁灭,只有博士幸存。重生时间领主可以在他们的身体严重损毁(即死亡)时进行“重生”。政治时间领主接受时间领主高阶会议(theHighConsulofTimeLords)的管束,大统领(LordPresident)是他们的领导者。已知时间领主博士Azmael,被博士称为“史上最好的老师”。Jenny,博士的女儿。
· 北京时间真的是北京时间吗?北京时间的真相
北京时间是北京的时间吗?当然不是。中国幅员辽阔,从东向西跨越五个时区,即东五、六、七、八、九区。新中国成立以后,以东八区作为中国标准时间,也就是北京时间。然而,其实这个北京时间并不是北京所在位置的时间。严格说,东北区东经120度线刚好穿过了常州市中心,你可以说真正北京时间其实是常州时间才对。而北京当地时间比北京时间约晚14分半钟。
· 时间简史
销售情况《时间简史》荣登《星期日时报》畅销榜237周,为最畅销的科普作品。共被翻译成40多种语言,销售1000余万册。中文版ISBN978-7-5357-3230-9(简中)译者:许明贤、吴忠超ISBN978-9-5752-0002-2(繁中)译者:许明贤、吴忠超修订版《时间简史:插图版》。许明贤、吴忠超译。长沙:湖南科学技术出版社,2011。ISBN9787535732309。译自:TheIllustratedaBriefHistoryofTime。1996。与雷纳德·穆拉德诺夫(LeonardMlodinow)合著。《时间简史:普及版》。吴忠超译。长沙:湖南科学技术出版社,2011。ISBN9787535744517。译自:ABrieferHistoryofTime。2005。参见史提芬·霍金《胡桃里的宇宙》《大设计》参考文献史蒂芬·霍金著,许明贤、吴忠超译:《时间简史(插图本)》,中...
· 时间与永恒
有一次,一个美国女记者走访爱因斯坦,问道:“依您看,时间和永恒有什么区别呢?”爱因斯坦答道:“亲爱的女士,如果我有时间给您解释它们之间的区别的话,那么,当你明白的时候,永恒就消失了!”

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信