1.算法的度量方法
(1).事后統計方法:先設計并編寫好,運行后統計時間
缺陷:必須先耗費精力編寫好;測試環境不同,結果不同
(2).事前分析估算方法:在程序編寫前,依據統計方法對算法進行估算
(3).程序耗時的決定因素:
①.算法采用的策略、方案
②.編譯產生的代碼質量
③.問題的輸入規模(輸入規模是只輸入量的多少)
④.機器執行指令的速度
總結:拋開機器問題,一個程序的運行時間依賴于算法的好壞和問題的輸入規模
2.函數的漸近增長
給定兩個函數f(n)和g(n),如果存在一個整數N,使得對于所有的n>N,f(n)總是比g(n)大,那么,我們說f(n)的增長漸近快于g(n)
判斷一個算法的效率時,函數中的常數和其他次要項常??梢院雎裕恍枰P注最高項的階數
3.算法的時間復雜度
在進行算法分析時,語句總的執行次數T(n)是關于問題規模n的函數,進而分析T(n)隨n的變化情況并確定T(n)的數量級。算法的時間復雜度,也就是算法的時間量度,記作:T(n)=O(f(n))。它表示隨著問題規模n的增大,算法執行時間的增長率和f(n)的增長率相同,稱作算法的漸近時間復雜度,簡稱時間復雜度。其中f(n)是問題規模n的某個函數
關鍵:執行次數 == 時間
這種用大寫O()來體現算法時間復雜度的記法,稱之為大O記法
一般情況下,隨著輸入規模n的增大,T(n)增長最慢的算法為最優算法
4.推導大O階方法
(1).用常數1取代運行時間中的所有加法常數
(2).在修改后的運行次數函數中,只保留最高階項
(3).如果最高階項存在且不是1,則去除與這個項相乘的常數
上面三步之后得到的最后結果就是大O階
5.常見的時間復雜度
常用的時間復雜度所耗費的時間從小到大依次是:O(1)<O(logn)<(n)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)
平均運行時間是期望的運行時間。最壞運行時間是一種保證,在應用中,這是一種罪重要的需求,通常除非特別指定,數據結構中提到的運行時間都是最壞情況的運行時間
6.最壞情況與平均情況
平均運行時間是期望的運行時間。最壞運行時間是一種保證,在應用中,這是一種罪重要的需求,通常除非特別指定,數據結構中提到的運行時間都是最壞情況的運行時間
7.算法的空間復雜度
算法的空間復雜度通過計算算法所需的存儲空間實現,算法的空間復雜度的計算公式記作:S(n)=O(f(n)),其中n為問題的規模,f(n)為語句關于n所占存儲空間的函數。
通常,我們都是用“時間復雜度”來指運行時間的需求,用“空間復雜度”指空間需求
當直接說“復雜度”時,通常指的是時間復雜度