1.算法概念
解決問題的方法和步驟的描述,也就是怎么解決問題
2.算法的特性
有窮性:一個必須總在執行有窮步之后結束,且每一步都可在有窮時間內完成
確定性:算法中的每條指令必須有確切的含義,對於相同的輸入只能得出相同的輸出
可行性:算法中描述的操作都可以通過已經實現的基本運算執行有限次來實現
輸入:一個算法有零個或多個輸入
輸出:一個算法有一個或多個輸出
3.好算法的性質
正確性:算法應該能夠正確的解決求解問題
可讀性:算法應具有良好的可讀性,以幫助人們理解
健壯性:輸入非法數據時,算法能適當地做出反應或進行處理,而不會產生莫名其妙的的輸出結果
高效率和低存儲量需求
4.時間復雜度----漸進時間復雜度
a.算法的時間開銷T(n)與問題規模n的關系
①:執行1次
②:執行n+1次 這里是30001
③④:執行n次 這里是3000
⑤:執行1次
T(n) = 1 + n + 1 + 2n + 1 = 3n + 3
在計算時間復雜度時,我們可以總考慮階數高的部分,並且可以忽略常數項系數
所以上述的T(n) = O(n)
加法規則:多項相加,保留最高階,並且系數變為1
如:O(n^2) + O(n) + O(1) +O(n^2) = O(n^2)
乘法規則:多項相乘,都保留
如O(n) * O(n) = O(n^2)
算法時間復雜度對比:
在計算時間復雜度時,我們只需考慮最深層的循環或遞歸的深度
b.時間復雜度的計算:
假設循序執行x次退出,此時2^(x-1)=n
所以時間復雜度為
5.空間復雜度----表示內存開銷與問題規模n之間的關系
空間復雜度為O(1)
空間復雜度為O(n)
空間復雜度為O(n)
遞歸調用的空間復雜度為遞歸調用的深度
算法原地工作--算法所需要的內存空間為常量