缺點:不一樣的數據規模,不一樣的機器下算法運行的時間不一樣,沒法作到計算運行時間java
漸進時間複雜度 隨着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的值變化以下
根據對數函數的公式 2的i次方等於n,i等於log2n
數據比較有序的狀況的時間複雜度
數據徹底無序
與n無關的代碼空間複雜度能夠忽略
空間複雜度O(n)
test(n) { //在內存中開闢了一個長度爲n的數組 List array = List(n); print(array.length); }