production自動化釋出
阿新 • • 發佈:2020-11-27
演算法的時間與空間複雜度
事後分析法
缺點:不同的資料規模,不同的機器下演算法執行的時間不同,無法做到計算執行時間
事前分析法
大O時間複雜度
漸進時間複雜度 隨著n的增長,程式執行時間跟隨n變化的趨勢
幾個原則
去掉常數項
2(n^2) =n^2
一段程式碼取時間複雜度最高的
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); } }
這段程式碼的時間複雜度為n3+n2+n
當n足夠大時,n2和n與n3相比太小,可以忽略不計
常見覆雜度
o(1)
i = i + 1;
o(n)
test(n){
for(int i = 0 ;i < n;i++){
print(i);
}
}
o(n^2)
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);
}
文章會首發在微信公眾號‘’傑克的程式人生‘’,歡迎關注。
掃描左側二維碼關注公眾號,掃描右側二維碼新增作者微信,加入Flutter技術交流群。