自學 資料結構四月二十一日_時間複雜度&空間複雜度

Bite_magican發表於2019-04-21

PS: 今天週日鞏固一下所學的資料結構篇章

1. 如何衡量一個演算法的好壞?
時間複雜度&空間複雜度(這個是次要的)

2. 什麼是時間複雜度?
演算法中的基本操作的執行次數

3. 時間複雜度為什麼不使用時間來衡量而使用基本語句的執行次數來衡量?
因為一般和時間成正比

4. 時間複雜度的O漸進表示法

  1. 用1表示所有加法常數
  2. 在算出的執行次數中只保留最高項, 刪除其他項

5. 時間複雜度的:最優、平均、最差情況,為什麼時間複雜度看的是最差情況?
最大, 最小執行次數;

6. 如何求解:二分查詢、遞迴求階乘、遞迴斐波那契的時間複雜度?
二分: O(logN)
遞迴: O(N)
斐波那契額: O(2^n)

7. 什麼是空間複雜度?
佔用多少臨時儲存空間;

8. 如何求空間複雜度? 普通函式&遞迴函式
開闢了多少次空間, 多少深度;

9. 分析遞迴斐波那契數列的:時間、空間複雜度,並對其進行優化,偽遞迴優化—>迴圈優化
斐波那契函式:
long long Fibonacci(size_t N){
return N < 2 ? N : Fibonacci(N - 1) + Fibonacci(N - 2);
}
時間複雜度O(2^n) 空間複雜度O(N)
優化:
long long Fibonacci(long long first, long long second, int N){
if(N < 3){
return 1;
}
if(N == 3){
return first +second;
}
return Fibonacci(second, first+second, N - 1);
}

10. 常見時間複雜度
二分查詢: O(logN)
遞迴函式(二叉樹, 數分裂): O(N)
斐波那契函式(生兔子,下面之和): O(2^n)
氣泡排序: O(N^2)

相關文章