資料結構中的時間和空間複雜度
演算法分析
演算法效率的分析可以在兩個不同的階段進行,即實現之前和實現之後,如下所示:
先驗分析 - 這被定義為演算法的理論分析。透過假設所有其他因素(例如處理器的速度)都是恆定且對實現沒有影響來衡量演算法的效率。
後驗分析 - 這被定義為演算法的經驗分析。所選擇的演算法使用程式語言實現。接下來,所選擇的演算法在目標計算機上執行。在此分析中,會收集實際統計資料,例如執行時間和所需空間。
演算法分析處理的是各種操作的執行或執行時間。操作的執行時間可以定義為每個操作執行的計算機指令數。
演算法複雜度
假設 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) 隨著輸入大小的增加而線性增長。
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP