時間與空間複雜度分析

1.時間複雜度:
a.實際上,在大多數情況下,我們並不需要區分最好、最壞、平均情況時間複雜度三種情況。像我們上一節課舉的那些例子那樣,很多時候,我們使用一個複雜度就可以滿足需求了。只有同一塊代碼在不同的情況下,時間複雜度有量級的差距,我們纔會使用這三種複雜度表示法來區分。
b.目標爲結合例子說明平均時間複雜度的概念(說明程序,指出將每種情況出現的概率結合考慮)
c. 一般情況下,算法中基本操作重複執行的次數是問題規模n的某個函數,用T(n)表示,若有某個輔助函數f(n),使得當n趨近於無窮大時,T(n)/f(n)的極限值爲不等於零的常數,則稱f(n)是T(n)的同數量級函數。記作T(n)=O(f(n)),稱O(f(n)) 爲算法的漸進時間複雜度,簡稱時間複雜度。
淺析最好,最壞,平均,均攤時間複雜度:
https://www.jianshu.com/p/f985d18489f7
2.算法的空間複雜度:
a. 算法在計算機存儲器上所佔用的存儲空間,包括存儲算法本身所佔用的存儲空間,算法的輸入輸出數據所佔用的存儲空間和算法在運行過程中臨時佔用的存儲空間這三個方面。
算法的輸入輸出數據所佔用的存儲空間是由要解決的問題決定的,是通過參數表由調用函數傳遞而來的,它不隨本算法的不同而改變。
存儲算法本身所佔用的存儲空間與算法書寫的長短成正比,要壓縮這方面的存儲空間,就必須編寫出較短的算法。
算法在運行過程中臨時佔用的存儲空間隨算法的不同而異,有的算法只需要佔用少量的臨時工作單元,而且不隨問題規模的大小而改變,我們稱這種算法是“就地/"進行的,是節省存儲的算法,如這一節介紹過的幾個算法都是如此;有的算法需要佔用的臨時工作單元數與解決問題的規模n有關,它隨着n的增大而增大,當n較大時,將佔用較多的存儲單元。
b.算法的空間複雜度的計算:
一個算法的空間複雜度只考慮在運行過程中爲局部變量分配的存儲空間的大小,它包括爲參數表中形參變量分配的存儲空間和爲在函數體中定義的局部變量分配的存儲空間兩個部分。若一個算法爲遞歸算法,其空間複雜度爲遞歸所使用的堆棧空間的大小,它等於一次調用所分配的臨時存儲空間的大小乘以被調用的次數(即爲遞歸調用的次數加1,這個1表示開始進行的一次非遞歸調用)。算法的空間複雜度一般也以數量級的形式給出。如當一個算法的空間複雜度爲一個常量,即不隨被處理數據量n的大小而改變時,可表示爲O(1);當一個算法的空間複雜度與以2爲底的n的對數成正比時,可表示爲O(log2n);當一個算法的空間複雜度與n成線性比例關係時,可表示爲O(n).若形參爲數組,則只需要爲它分配一個存儲由實參傳送來的一個地址指針的空間,即一個機器字長空間;若形參爲引用方式,則也只需要爲其分配存儲一個地址的空間,用它來存儲對應實參變量的地址,以便由系統自動引用實參變量。
3.python中時間複雜度和空間複雜度的計算
http://www.hi-roy.com/2017/07/16/python常見操作時間複雜度/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章