时间复杂度跟空间复杂度

时间复杂度:执行一个算法所须要的时间的衡量标准。python

空间复杂度:执行一个算法所须要的空间的衡量标准。算法

拿时间换空间和拿空间换时间是优化算法的途径。函数

求时间复杂度:oop

    若是算法的执行时间不随着问题规模n的增长而增加,即便算法中有上千条语句,其执行时间也不过是一个较大的常数 。性能

    主要看有没有N的问题。
 优化

>>> a=5
>>> b=6
# c=a+b ,就算是执行了100次1000次,它的复杂度仍是1,由于他是一个固定的数,你规定它执行1000次,那这个算法每次都是执行1000
#次,没有随着某个N而变的复杂
>>> c=a+b
>>> c=a+b
>>> c=a+b

当有若干个循环语句时,算法的时间复杂度是由嵌套层数最多的循环语句中最内层语句的频度f(n)决定的.net

典型的就是循环操做
def looptest(n):
    for i in range(n):
        print i

### 以looptest为例,这就是一个随着N的变化,执行时间会变化的函数。
### n=100 和 N=1000000 ,looptest执行的时间确定是有差别的。
### 这种的复杂度就是 O(n)

经过以上两个例子简单的介绍一下如何计算时间复杂度。code

推导时间复杂度的方法:blog

  1. 用1取代全部加法常数,存在O(1)可是不存在O(12),这种的复杂度
  2. 在修改后的运行次数后,只保留最高阶
  3. 若是最高阶存在且不是1,则去除跟这个项相乘的常数

再找几个例子来讲明如何推导时间复杂度:class

    http://blog.csdn.net/zhangliangzi/article/details/50680694 

 

时间复杂度评价性能

    若是你有两个算法,f1(n) 和f2(n) ,O1(n) > O2(n),但也不能单凭时间复杂度来判断一个算法的优劣。举个简单的例子,若是你的N一直保持在必定的范围内,N并不会随着业务的增加而变的愈来愈大,若是N的范围内O1的效率也是有可能比O2要高。是一个度的问题。

    有两个算法A1和A2求解同一问题,时间复杂度分别是T1(n)=100n2,T2(n)=5n3。(1)当输入量n<20时,有T1(n)>T2(n),后者花费的时间较少。(2)随着问题规模n的增大,两个算法的时间开销之比5n3/100n2=n/20亦随着增大。即当问题规模较大时,算法A1比算法A2要有效地多。它们的渐近时间复杂度O(n2)和O(n3)从宏观上评价了这两个算法在时间方面的质量。在算法分析时,每每对算法的时间复杂度和渐近时间复杂度不予区分,而常常是将渐近时间复杂度T(n)=O(f(n))简称为时间复杂度,其中的f(n)通常是算法中频度最大的语句频度。

相关文章
相关标签/搜索