同一問題可用不同演算法解決,而乙個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。
電腦科學中,演算法的時間複雜度是乙個函式,它定量描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串的長度的函式。時間複雜度常用大o符號表述,不包括這個函式的低階項和首項係數。使用這種方式時,時間複雜度可被稱為是漸近的,它考察當輸入值大小趨近無窮時的情況。
演算法複雜度分類
演算法複雜度分為時間複雜度和空間複雜度。其作用:時間複雜度是指執行演算法所需要的計算工作量;而空間複雜度是指執行這個演算法所需要的記憶體空間。(演算法的複雜性體現在執行該演算法時的計算機所需資源的多少上,計算機資源最重要的是時間和空間(即暫存器)資源,因此複雜度分為時間和空間複雜度)。
時間複雜度的計算方法
1、一般情況下,演算法中基本操作重複執行的次數是問題規模n的某個函式,用t(n)表示,若有某個輔助函式f(n),使得當n趨近於無窮大時,t(n)/f(n)的極限值為不等於零的常數,則稱f(n)是t(n)的同數量級函式。記作t(n)=o(f(n)),稱o(f(n)) 為演算法的漸進時間複雜度,簡稱時間複雜度。
分析:隨著模組n的增大,演算法執行的時間的增長率和 f(n) 的增長率成正比,所以 f(n) 越小,演算法的時間複雜度越低,演算法的效率越高。
2、在計算時間複雜度的時候,先找出演算法的基本操作,然後根據相應的各語句確定它的執行次數,再找出 t(n) 的同數量級(它的同數量級有以下:1,log2n,n,n log2n ,n的平方,n的三次方,2的n次方,n!)。找出後,f(n) = 該數量級,若 t(n)/f(n) 求極限可得到一常數c,則時間複雜度t(n) = o(f(n))。
舉例說明:演算法:
for(i=1;
i<=n; ++i) }
t(n) = n的平方+n的三次方,根據上面括號裡的同數量級,我們可以確定n的三次方為t(n)的同數量級;
f(n) = n的三次方,然後根據 t(n)/f(n) 求極限可得到常數c;
則該演算法的時間複雜度:t(n) = o(n^3) 注:n^3即是n的3次方。
時間複雜度的分類
按數量級遞增排列,常見的時間複雜度有:
常數階o(1),對數階o( ),線性階o(n),線性對數階o(nlog2n),平方階o(n^2),立方階o(n^3),…,
k次方階o(n^k),指數階o(2^n)。
隨著問題規模n的不斷增大,上述時間複雜度不斷增大,演算法的執行效率越低。
大話資料結構 之時間複雜度
程式猿可以讓步,卻不可以退縮,可以羞澀,卻不可以軟弱,總之,程式設計師必須是勇敢的。時間複雜度序言 當前兩天我寫完 大話資料結構 的序言的時候,我就在想,我該如何把從大話資料結構中對應用開發人員有用的知識提煉出來?我是該如同課本一樣把所有的知識羅列個遍?還是如何如何,我想如果我把所有的東西都羅列出來...
資料結構之時間複雜度和空間複雜度
演算法複雜度分為時間複雜度和空間複雜度,乙個好的演算法應該具體執行時間短,所需空間少的特點。隨著計算機硬體和軟體的提公升,乙個演算法的執行時間是算不太精確的。只能依據統計方法對演算法進行估算。我們拋開硬體和軟體的因素,演算法的好壞直接影響程式的執行時間。我們看一下小例子 int value 0 執行...
資料結構之時間複雜度和空間複雜度
準備系統性的記錄一下資料結構與演算法的知識點,今天就先從時間複雜度與空間複雜度開始咯 時間複雜度的定義 在電腦科學中,演算法的時間複雜度是乙個函式,它定量描述了該演算法的執行時間。乙個演算法執行所耗費的時間,從理論上說,是不能算出來的,只有你把你的程式放在機器上跑起來,才能知道。並且在測試過程中還需...