复杂度分析

复杂度分析也是一种用来评价算法的性能的方法,相比较时间的统计方法(依赖于平台)和指令计数的不切实际,复杂度分析只需要纸和笔来进行简单的代数的计算


复杂度的阶

算法的分析中,如果一个算法对于任何的问题规模,都需要相同的操作的次数,那么他就是一个常数阶的性能。例子:列表的索引就是典型的常数阶


对数阶的性能要比线性阶好一些,但是相比常数阶要差。一个对数阶的算法的工作量和问题的log2成正比,当问题的规模翻倍的时候,该算法的工作量也就是只是多一次而已。


一个多项式阶的时间算法的工作量,按照n^k的速率增加。其中k是一个大于1 的常数。


比多项式的阶更加复杂的是指数阶。指数阶的算法对于较大的问题而言是不切实际的。


大O表示法

一个算法的工作量通常是一个多项式的数项之和。当用多项式来表达工作量的时候,有一个项是主项,随着n的变大而越来越大,以至于可以忽视其他的项的工作量。

大O表示法的原理是:on the order of(在……阶),这是对算法的工作量的复杂度的一种表述,例如一个线性算法的阶是O(n)


常量比例的作用

常量比例设计在O分析中经常会被忽略的项和系数。然而当项很大时候,他们可能会影响到算法,对于较小的或者中等大小的数据的集合。更是如此。

以一下的代码为例:

work=1
for x in range(problemsize):
	work+=1
	work-=1

   

注意以上的代码除去循环自身,还有三行代码,其中每一行都是赋值的语句,这三条语句中的每一条都需要常量时间,还要假设,在每一次的迭代中,隐藏在循环开始处的管理循环的开销,也运行一条需要常量时间的指令,因此这个算法所执行的抽象的工作量为3n+1。尽管n和3n+1这两个工作量的运行时间都是按照相同的速率增加的。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值