資料結構概念解析之 空間複雜度

2021-07-11 07:36:44 字數 1650 閱讀 9481

空間複雜度的基本概念

空間複雜度(space complexity)是對乙個演算法在執行過程中臨時占用儲存空間大小的量度,記做s(n)=o(f(n))。

比如直接插入排序的時間複雜度是o(n^2),空間複雜度是o(1) 。而一般的遞迴演算法就要有o(n)的空間複雜度了,因為每次遞迴都要儲存返回資訊。

乙個演算法的優劣主要從演算法的執行時間和所需要占用的儲存空間兩個方面衡量。

乙個演算法在計算機儲存器上所占用的儲存空間,包括三個方面的內容:

1、儲存演算法本身所占用的儲存空間;

2、演算法的輸入輸出資料所占用的儲存空間;

3、演算法在執行過程中臨時占用的儲存空間這三個方面。

演算法的輸入輸出資料所占用的儲存空間是由要解決的問題決定的,是通過參數列由呼叫函式傳遞而來的,它不隨本演算法的不同而改變。

儲存演算法本身所占用的儲存空間與演算法書寫的長短成正比,要壓縮這方面的儲存空間,就必須編寫出較短的演算法。

演算法在執行過程中臨時占用的儲存空間隨演算法的不同而異,有的演算法只需要占用少量的臨時工作單元,而且不隨問題規模的大小而改變,我們稱這種演算法是「就地」進行的,是節省儲存的演算法,有的演算法需要占用的臨時工作單元數與解決問題的規模n有關,它隨著n的增大而增大,當n較大時,將占用較多的儲存單元,例如快速排序和歸併排序演算法就屬於這種情況。

分析乙個演算法所占用的儲存空間要從各方面綜合考慮。如對於遞迴演算法來說,一般都比較簡短,演算法本身所占用的儲存空間較少,但執行時需要乙個附加堆疊,從而占用較多的臨時工作單元;若寫成非遞迴演算法,一般可能比較長,演算法本身占用的儲存空間較多,但執行時將可能需要較少的儲存單元。

乙個演算法的空間複雜度只考慮在執行過程中為區域性變數分配的儲存空間的大小,它包括:(1)為參數列中形參變數分配的儲存空間和(2)為在函式體中定義的區域性變數分配的儲存空間兩個部分。

若乙個演算法為遞迴演算法,其空間複雜度為遞迴所使用的堆疊空間的大小,它等於一次呼叫所分配的臨時儲存空間的大小乘以被呼叫的次數(即為遞迴呼叫的次數加1,這個1表示開始進行的一次非遞迴呼叫)。

演算法的空間複雜度一般也以數量級的形式給出。如:

1、當乙個演算法的空間複雜度為乙個常量,即不隨被處理資料量n的大小而改變時,可表示為:o(1);

2、當乙個演算法的空間複雜度與以2為底的n的對數成正比時,可表示為:o(log2n);

3、當乙個演算法的空間複雜度與n成線性比例關係時,可表示為:o(n)。若形參為陣列,則只需要為它分配乙個儲存由實參傳送來的乙個位址指標的空間,即乙個機器字長空間;若形參為引用方式,則也只需要為其分配儲存乙個位址的空間,用它來儲存對應實參變數的位址,以便由系統自動引用實參變數。

時間複雜度與空間複雜度比較

對於乙個演算法,其時間複雜度和空間複雜度往往是相互影響的。當追求乙個較好的時間複雜度時,可能會使空間複雜度的效能變差,即可能導致占用較多的儲存空間;反之,當追求乙個較好的空間複雜度時,可能會使時間複雜度的效能變差,即可能導致占用較長的執行時間。

另外,演算法的所有效能之間都存在著或多或少的相互影響。因此,當設計乙個演算法(特別是大型演算法)時,要綜合考慮演算法的各項效能,演算法的使用頻率,演算法處理的資料量的大小,演算法描述語言的特性,演算法執行的機器系統環境等各方面因素,才能夠設計出比較好的演算法。

演算法的時間複雜度和空間複雜度合稱為演算法的複雜度。

資料結構 時間複雜度 空間複雜度

1.演算法效率 演算法效率可以用來衡量乙個演算法的好壞 演算法效率分析分為兩種 第一種是時間效率,第二種是空間效率.時間效率被稱為時間複雜度,空間效率被稱為空間複雜度.時間複雜度主要衡量的是乙個演算法的執行速度,而空間複雜度主要衡量乙個演算法所需要的額外空間,在計算機發展的早期,計算機的儲存容量很小...

資料結構概念解析之 時間複雜度

同一問題可用不同演算法解決,而乙個演算法的質量優劣將影響到演算法乃至程式的效率。演算法分析的目的在於選擇合適演算法和改進演算法。電腦科學中,演算法的時間複雜度是乙個函式,它定量描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串的長度的函式。時間複雜度常用大o符號表述,不包括這個函式的低階項...

資料結構時間複雜度和空間複雜度

1 演算法o n 關注n的階數,當數十分大的時候,常數可以忽略。o n 又稱為大o記法。2 t n o f n 隨著n變化而變化,f n 是某個函式,執行的次數等於時間,一般情況下,t n 增長最慢的演算法最優。4 推到o n 1,用1取代時間中所有加法常數 哪些可以忽略 2,在修改後的執行函式中,...