跳轉到

附錄 B 重要演算法時間空間複雜度速查表#

本附錄彙整書中出現的主要演算法之時間與空間複雜度。複雜度分析始於高斯時代對運算次數的計數,但現代意義上的漸進記號要到 Landau(1909、1924)才被系統化;1970 年代 Knuth 將其定為演算法分析的標準語言。以下表格中,\(n\) 為主要規模參數,每行附帶一句關鍵假設,因為同一演算法在不同假設下(稠密或稀疏、是否 pivot、收斂率類型)複雜度可能相差甚遠。

B.1 線性代數與數值線性代數#

問題 / 演算法 時間複雜度 空間複雜度 關鍵假設
稠密矩陣—矩陣乘法 \(O(n^3)\) \(O(n^2)\) 稠密、一般矩陣、經典三重迴圈
Strassen 演算法 \(O(n^{\log_2 7}) \approx O(n^{2.81})\) \(O(n^{\log_2 7})\) \(n\) 為 2 的冪(需 padding),數值穩定性略遜經典法
理論最好界 \(O(n^{\omega})\),\(\omega \lesssim 2.37\) — 目前最好(如 Alman–Duan–Vassilevska Williams 等的 \(2.371552\))僅為理論結果,常數巨大,實務不用
稀疏矩陣—向量乘 \(O(\mathrm{nnz})\) \(O(\mathrm{nnz})\) 以 CSR/CSC 儲存,\(\mathrm{nnz}\) 為非零元素數
LU 分解(含 partial pivoting) \(\tfrac{2}{3}n^3 + O(n^2)\) \(O(n^2)\) 稠密、需 pivoting 保穩定性;稀疏時受 fill-in 主導
Cholesky 分解 \(\tfrac{1}{3}n^3 + O(n^2)\) \(O(n^2)\) 對稱正定,不需 pivoting,成本約為 LU 一半
QR 分解(Householder) \(2n^3 + O(n^2)\)(矩陣同形 \(m=n\)) \(O(n^2)\) 一般稠密矩陣;\(m \times n\) 時為 \(O(mn^2)\)
三對角 LU(Thomas 演算法) \(O(n)\) \(O(n)\) 帶狀結構(頻寬固定),不需選主元
SVD(Golub–Kahan) \(O(mn^2)\),\(m \ge n\) \(O(mn)\) 一般稠密矩陣,需迭代求特徵值;計算所有奇異向量時為主導成本
對稱特徵值分解 \(O(n^3)\) \(O(n^2)\) 對稱矩陣;QR 演算法或 divide-and-conquer
稀疏直接法(Cholesky) 依填入而定,最壞 \(O(n^3)\) 受 fill-in 主導 依好排序(如巢狀剖分、AMD)可近 \(O(n^{1.5})\) 等於二維網格問題
共軛梯度法(CG) 每步 \(O(\mathrm{nnz})\) \(O(\mathrm{nnz})\) 對稱正定;誤差 \(\|e_k\|_A \le 2(\tfrac{\sqrt{\kappa}-1}{\sqrt{\kappa}+1})^k \|e_0\|_A\),理想平坦譜時至多 \(n\) 步收斂
GMRES 每步 \(O(\mathrm{nnz} + k n)\) Arnoldi 基底 \(O(kn)\) 非對稱矩陣;第 \(k\) 步需儲存全部基底,故需重啟

B.2 傅立葉與訊號處理#

演算法 時間複雜度 空間複雜度 關鍵假設
直接 DFT \(O(n^2)\) \(O(n)\) 直接計算 \(n\) 個基函數內積
Cooley–Tukey FFT \(O(n \log n)\) \(O(n)\) \(n\) 為 2 的冪(radix-2);一般混合基仍為 \(O(n\log n)\)
多維 FFT \(O(N \log N)\)(\(N\) 為總點數) \(O(N)\) 各維獨立,逐維做一維 FFT

B.3 最佳化#

演算法 時間複雜度 空間複雜度 關鍵假設
單純形法(simplex,Dantzig 1947) 指數級最壞情況(Klee–Minty 1972 反例),實務平均 \(O(m n)\) 級 \(O(mn)\) 線性規劃 \(m \times n\) 約束;實務上迭代數量約為約束數的線性倍
內點法(interior point,Karmarkar 1984) \(O(\sqrt{n} \, L)\) 次迭代,總多項式時間 \(O(n^2)\) 以上(需解牛頓系統) 線性規劃;每步需解稀疏牛頓系統,實際迭代數通常 20–50 次、與規模弱相關
梯度下降(光滑凸) \(O(\kappa \log(1/\varepsilon))\) 次迭代 \(O(n)\) 函數 \(L\)-光滑且 \(\mu\)-強凸,\(\kappa = L/\mu\);線性收斂率
Nesterov 加速梯度法 \(O(\sqrt{\kappa} \log(1/\varepsilon))\) 次迭代 \(O(n)\) 同上;加速後最佳一階複雜度
牛頓法 每步 \(O(n^3)\)(解 Hessian 系統) \(O(n^2)\) 二階光滑、Hessian 非奇異;二次收斂(局部)
擬牛頓法(BFGS) 每步 \(O(n^2)\) \(O(n^2)\) 光滑函數;超線性收斂,不需精確 Hessian

B.4 隨機方法#

演算法 時間複雜度 空間複雜度 關鍵假設
MCMC(Metropolis–Hastings,1953/1970) \(O(K)\) 步,每步 \(O(\text{模型評估})\) \(O(\text{狀態維度})\) 目標分佈已知至正規化常數;需混合時間(mixing time)控制,慢混合時 \(K\) 可能極大
蒙地卡羅積分 \(O(N)\) 個樣本,誤差 \(O(N^{-1/2})\) \(O(1)\) 獨立取樣;收斂率與維度無關(與決定論網格的 \(O(N^{-d/n})\) 相比是優勢)

B.5 計算幾何#

演算法 時間複雜度 空間複雜度 關鍵假設
凸包(二維,Graham scan,1972) \(O(n \log n)\) \(O(n)\) 平面點集;下界 \(\Omega(n \log n)\)(排序歸約)
凸包(三維,增量法) \(O(n \log n)\) 期望 \(O(n)\) 一般位置(no degeneracy)
Voronoi 圖(二維) \(O(n \log n)\) \(O(n)\) 平面點集;Voronoi 圖至多 \(3n-6\) 個頂點
Delaunay 三角化 \(O(n \log n)\) \(O(n)\) 與 Voronoi 對偶;空圓性質保證唯一(一般位置下)
KD-tree 建樹 \(O(n \log n)\) \(O(n)\) 座標可排序
KD-tree 最近鄰查詢 平均 \(O(\log n)\)(低維),最壞 \(O(n)\) \(O(n)\) 假設維度 \(d\) 固定且低;\(d\) 大時退化为掃描(維度災難)

B.6 自動微分#

模式 時間複雜度 空間複雜度 關鍵假設
前向模式(forward mode) \(O(n)\) 倍原函數成本(\(n\) 為輸入維度) \(O(1)\) 倍原空間 一次算一個方向導數;適合 \(m \gg n\)(輸出遠多於輸入)
反向模式(reverse mode) 常數倍原函數成本(理論上 \(\le 4\) 倍,實務 2–5 倍),可算全梯度 \(O(\text{原空間}) \times\) 執行長度(需存 tape) 需記錄所有中間量(tape/checkpointing);適合 \(n \gg m\),是反向傳播的數學基礎

B.7 使用提醒#

  • 上表給的是漸進上界;實際效能取決於常數因子、記憶體存取模式與硬體(見第 11.1 節 BLAS 分層的討論)。
  • 複雜度對數中的基底不影響 \(O(\cdot)\) 記號,但在比較 FFT 實作(如 radix-2 與 radix-4)時有意義。
  • 疊代法的「複雜度」應換算為達到精度 \(\varepsilon\) 所需迭代數 \(\times\) 每步成本,收斂率(linear/quadratic/superlinear)正是這個換算的核心,見附錄 C。