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


演算法分析

演算法效率的分析可以在兩個不同的階段進行,即實現之前和實現之後,如下所示:

先驗分析 - 這被定義為演算法的理論分析。透過假設所有其他因素(例如處理器的速度)都是恆定且對實現沒有影響來衡量演算法的效率。

後驗分析 - 這被定義為演算法的經驗分析。所選擇的演算法使用程式語言實現。接下來,所選擇的演算法在目標計算機上執行。在此分析中,會收集實際統計資料,例如執行時間和所需空間。

演算法分析處理的是各種操作的執行或執行時間。操作的執行時間可以定義為每個操作執行的計算機指令數。

演算法複雜度

假設 X 代表一個演算法,N 代表輸入資料的規模,演算法 X 實現的時間和空間是決定 X 效率的兩個主要因素。

時間因素 - 透過計算關鍵操作的數量(例如排序演算法中的比較次數)來計算或測量時間。

空間因素 - 透過計算演算法所需的最大記憶體空間來計算或測量空間。

演算法的複雜度 f(N) 提供了演算法相對於輸入資料大小 N 的執行時間和/或儲存空間。

空間複雜度

演算法的空間複雜度 表示演算法在其生命週期中所需的記憶體空間量。

演算法所需的空間等於以下兩個部分的總和:

固定部分,這是儲存某些資料和變數(即簡單變數和常量、程式大小等)所需的空間,這些空間不依賴於問題的規模。

可變部分,這是由變數所需的空間,其大小完全取決於問題的規模。例如,遞迴堆疊空間、動態記憶體分配等。

任何演算法 p 的空間複雜度 S(p) 為 S(p) = A + Sp(I),其中 A 代表演算法的固定部分,S(I) 代表演算法的可變部分,它取決於例項特性 I。以下是一個簡單的例子,試圖解釋這個概念:

演算法

SUM(P, Q)
Step 1 - START
Step 2 - R ← P + Q + 10
Step 3 - Stop

這裡我們有三個變數 P、Q 和 R 以及一個常量。因此 S(p) = 1+3。現在空間取決於給定常量型別和變數的資料型別,並將相應地進行乘法。

時間複雜度

演算法的時間複雜度表示演算法執行到完成所需的時間量。時間需求可以用數值函式 t(N) 表示或定義,其中 t(N) 可以測量為步驟數,前提是每個步驟都花費恆定時間。

例如,對於兩個 n 位整數的加法,需要 N 個步驟。因此,總計算時間為 t(N) = c*n,其中 c 是兩個位相加所花費的時間。在這裡,我們觀察到 t(N) 隨著輸入大小的增加而線性增長。

更新於:2023年11月1日

49K+ 瀏覽量

開啟你的職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.