算法——算法的時間與空間複雜度

算法的時間與空間複雜度

過後分析法

缺點:不一樣的數據規模,不一樣的機器下算法運行的時間不一樣,沒法作到計算運行時間java

事前分析法

大O時間複雜度

漸進時間複雜度 隨着n的增加,程序運行時間跟隨n變化的趨勢算法

幾個原則

去掉常數項數組

2(n^2) =n^2ide

一段代碼取時間複雜度最高的函數

test(n) {
  //時間複雜度n^3
 for(int i = 0; i < n ; i++){
   for(int i = 0; i < n ; i++){
     for(int i = 0; i < n ; i++){
            print(n);
     }
   }
 }
 //時間複雜度n^2
 for(int i = 0; i < n ; i++){
   for(int i = 0; i < n ; i++){
     print(n);
   }
 }
 //時間複雜度n
 for(int i = 0; i < n ; i++){
   print(n);
 }
}

這段代碼的時間複雜度爲n^3+n^2+ncode

當n足夠大時,n^2和n與n^3相比過小,能夠忽略不計blog

常見覆雜度

o(1)內存

i = i + 1;

o(n)it

test(n){
  for(int i = 0 ;i < n;i++){
    print(i);
  }
}

o(n^2)class

test(n){
  for(int i = 0 ;i < n;i++){
    print(i);
    for(int j = 0 ;j < n;j++){
      print(i);
    }
  }
}

o(log2n)

PS:若是ax =N(a>0,且a≠1),那麼數x叫作以a爲底N的對數,記做x=logaN,讀做以a爲底N的,其中a叫作對數的底數,N叫作真數。

test(n) {
  int i = 1;
  while (i <= n) {
    i = 2 * i;
  }
}

隨着循環次數的增長,i的值變化以下wbqHa9.png

根據對數函數的公式 2的i次方等於n,i等於log2n

wqAJlF.jpg

最好狀況時間複雜度

數據比較有序的狀況的時間複雜度

最壞狀況時間複雜度

數據徹底無序

空間複雜度

與n無關的代碼空間複雜度能夠忽略

空間複雜度O(n)

test(n) {
  //在內存中開闢了一個長度爲n的數組
  List array  =  List(n);
  print(array.length);
}

算法——算法的時間與空間複雜度

相關文章
相關標籤/搜索