演算法:演算法是解決特定問題求解步驟的描述,在電腦中表現為指令的有限序列,並且每條指令表示一個或多個操作
演算法的特性 :輸入,輸出,有窮性,確定性,可行性
演算法具有零個或多個輸入
演算法至少有一個或多個輸出
演算法在執行有限步驟之後,自動結束而不會出現無限迴圈,並且每一個步驟在可接受的時間內完成
演算法的每一步驟都具有確定的含義,無二義性
演算法的每一步都必須是可行的,也就是說,每一步都能夠通過執行有限次數完成
演算法設計要求
正確性,可讀性,健壯性,時間效率低和儲存量低
演算法效率度量方法
事後統計方法:通過設計好的測試程式和資料,利用電腦計時器對不同演算法編製的程式的已耗用時間進行比較,從而確定演算法的效率高低
缺陷:必須實現編好程式
時間比較依賴電腦硬體和軟體
演算法測試資料設計困難
事前分析估算方法:電腦程式編製前,依據統計方法對演算法進行估算
消耗時間依賴:1 演算法採用的策略,方法 2 編譯產生的代碼品質 3 問題輸入的規模 4 機器執行指令的速度
函數的漸近增長:給定兩個函數f(n) 和g(n),如果存在一個整數N,使得對於所有的n>N ,f(n)總是比g(n)大,那麼我們說f(n)
的增長漸近快於g(n)
與最高次項相乘的常數並不重要
判斷一個演算法的效率時,函數中的常數和其他次要項常常可以忽略,更應該關注主項的階數
演算法的時間複雜度 :T(n) = O(f(n)) 它表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同。稱作演算法的漸近時間複雜度。
推導大O階方法:
1 用常數1 取代已耗用時間中的所有加法常數
2 在修改後的運行次數函數中,只保留最高階項
3 如果最高階項存在且不是1,則去除與這個項相乘的常數
得到的結果就是大O階
最壞情況已耗用時間:就是已耗用時間不會再壞了
平均時間 期望啟動並執行時間
一般都是指最壞時間複雜度
演算法空間複雜度
通過計算演算法所需的儲存空間實現,演算法空間複雜度計算公式:s(n) = O(f(n)) n為問題的規模,f(n) 為語句關於n所佔的儲存空間函數