時間複雜度跟空間複雜度

時間複雜度:執行一個算法所須要的時間的衡量標準。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)通常是算法中頻度最大的語句頻度。

相關文章
相關標籤/搜索