1.演算法時間複雜度的定義
演算法的時間複雜度,也就是演算法的時間量度,記作:t(n)=o(f(n))。 它表示隨問題規模n的增大,演算法執行時間的增長率和f(n)的增長率相同,稱作演算法的漸近時間 複雜度,簡稱為-時間複雜度。其中f(n) 是問題規模n的某個函式。
這樣用o()來體現演算法時間複雜度的記法,我們稱之為大o記法。一般情況,隨著n的增大,t(n)增長最慢的演算法為最優演算法。
2.演算法時間複雜度例子
2.1 常數階
publicclass
agr
}
這個演算法的執行次數是f(n)=4,依據推導方法,常數項全部變為1,那麼這個演算法的時間複雜度即為o(1)。事實上,這種與問題的多少(n的多少),執行恆定的演算法,我們稱之為o(1)的時間複雜度,簡稱常數階。
2.2 線性階
要確定某個演算法的階次,我們需要確定某個特定語句或某個語句執行的次數。因此,分析演算法的時間複雜度,關鍵就是要分析迴圈結構的運**況。
publicclass
agr
}}
此段**的時間複雜度即為o(n),因為迴圈體中的**必須要執行n次。
2.3 對數階
publicclass
agr
}}
由於每次count*2 ,離n更近一些,也就是有多少個2相乘後大於n,便退出迴圈。2x=n 得到 x=log2n。所以此迴圈的時間複雜度為o(logn)
2.4 平方階
publicclass
agr }}
}
此為乙個迴圈巢狀演算法,內外層迴圈皆為n,故總迴圈次數為n2,所以此演算法時間複雜度為o(n2).
2.5 推導出的平方階
publicclass
agr }}
}
由於內層巢狀迴圈中j=i, 當i=0時, 迴圈n次,i=1時,迴圈n-1 ... 以此類推,總的迴圈次數為 n + (n-1) + (n-2) + ...... + 1 = n(n+1)/2 = n2/2 + n/2 。這時候要用到大o階的推導方法,沒有加法常數不考慮,只保留最高項, 故還剩 n2/2,另外去掉此項相乘的常數1/2,最後這個演算法的時間複雜度為o(n2).
3. 推導大o階的方法總結
1.用常數1取代執行時間中的所有加法常數,無常數的不考慮。
2.只保留最高端項。
3.最高端項存在且不是1,那麼去掉與此項相乘的常數。
按照此3項方法,推導出來的結果,即大o階。
4. 常見演算法時間複雜度所消耗時間的大小排列
o(1) < o(logn)2)
5. 最壞情況
當我們在查詢n個隨機數字陣列中的某個數字,最好的情況是第乙個數字就是,時間複雜度為o(1),最壞的情況遍歷完整個陣列才找到,時間複雜度為o(n)。 除非特別說明,我們一般指的執行時間,都是最壞情況下的執行時間,時間複雜度也是最壞情況下的時間複雜度。
演算法時間複雜度空間複雜度
演算法 是解決某一類問題的通法,即一系列清晰無歧義的計算指令。每個演算法只能解決具有特定特徵的一類問題,但乙個問題可由多個演算法解決。乙個演算法應該有以下五個方面的特性 比較演算法的優劣我們從兩個維度去進行考量 時間 空間 時間複雜度,空間複雜度 找出基本語句 演算法中執行次數最多的那條語句就是基本...
演算法 時間複雜度 空間複雜度
1 if i 1 2 a 1 result 3 4 result n 2 result 1000 1000 3 array.push a array.pop 4 map.set 1,1 map.get 1,1 在計算複雜度的時候,o 1 一般會被忽略。1 for let i 0 i n i 2 wh...
演算法的時間複雜度 空間複雜度
時間複雜度和空間複雜度是度量演算法效率的常用指標 事後統計,不常用 事前統計影響因素 演算法策略 問題規模 程式語言 質量 機器執行指令的速度 撇開軟硬體的影響,演算法執行工作量的大小只依賴於問題的規模 通常用整數n表示 乙個演算法是由控制結構 順序,分支,迴圈三種 和原操作 指固有資料型別的操作 ...