
- 演算法設計與分析
- 首頁
- 演算法基礎
- 演算法導論 - 演算法介紹
- 演算法導論 - 演算法分析
- 演算法導論 - 分析方法
- 演算法導論 - 漸近符號與先驗分析
- 演算法導論 - 時間複雜度
- 演算法導論 - 主定理
- 演算法導論 - 空間複雜度
- 分治法
- 演算法導論 - 分治演算法
- 演算法導論 - 最大最小問題
- 演算法導論 - 歸併排序演算法
- 演算法導論 - Strassen矩陣乘法
- 演算法導論 - Karatsuba演算法
- 演算法導論 - 漢諾塔
- 貪心演算法
- 演算法導論 - 貪心演算法
- 演算法導論 - 旅行商問題
- 演算法導論 - Prim最小生成樹
- 演算法導論 - Kruskal最小生成樹
- 演算法導論 - Dijkstra最短路徑演算法
- 演算法導論 - 地圖著色演算法
- 演算法導論 - 分數揹包問題
- 演算法導論 - 帶截止時間的作業排序
- 演算法導論 - 最優合併模式
- 動態規劃
- 演算法導論 - 動態規劃
- 演算法導論 - 矩陣鏈乘法
- 演算法導論 - Floyd-Warshall演算法
- 演算法導論 - 0-1揹包問題
- 演算法導論 - 最長公共子序列演算法
- 演算法導論 - 使用動態規劃的旅行商問題
- 隨機化演算法
- 演算法導論 - 隨機化演算法
- 演算法導論 - 隨機化快速排序演算法
- 演算法導論 - Karger最小割演算法
- 演算法導論 - Fisher-Yates洗牌演算法
- 近似演算法
- 演算法導論 - 近似演算法
- 演算法導論 - 頂點覆蓋問題
- 演算法導論 - 集合覆蓋問題
- 演算法導論 - 旅行商問題的近似演算法
- 排序技術
- 演算法導論 - 氣泡排序演算法
- 演算法導論 - 插入排序演算法
- 演算法導論 - 選擇排序演算法
- 演算法導論 - 希爾排序演算法
- 演算法導論 - 堆排序演算法
- 演算法導論 - 桶排序演算法
- 演算法導論 - 計數排序演算法
- 演算法導論 - 基數排序演算法
- 演算法導論 - 快速排序演算法
- 搜尋技術
- 演算法導論 - 搜尋技術介紹
- 演算法導論 - 線性搜尋
- 演算法導論 - 二分搜尋
- 演算法導論 - 插值搜尋
- 演算法導論 - 跳躍搜尋
- 演算法導論 - 指數搜尋
- 演算法導論 - 斐波那契搜尋
- 演算法導論 - 子列表搜尋
- 演算法導論 - 雜湊表
- 圖論
- 演算法導論 - 最短路徑
- 演算法導論 - 多階段圖
- 演算法導論 - 最優代價二叉搜尋樹
- 堆演算法
- 演算法導論 - 二叉堆
- 演算法導論 - 插入方法
- 演算法導論 - 堆化方法
- 演算法導論 - 提取方法
- 複雜度理論
- 演算法導論 - 確定性與非確定性計算
- 演算法導論 - 最大團
- 演算法導論 - 頂點覆蓋
- 演算法導論 - P類與NP類
- 演算法導論 - Cook定理
- 演算法導論 - NP難與NP完全類
- 演算法導論 - 爬山演算法
- 演算法導論 - 有用資源
- 演算法導論 - 快速指南
- 演算法導論 - 有用資源
- 演算法導論 - 討論
空間複雜度
本章將討論計算問題在演算法所需空間量方面的複雜度。
空間複雜度與時間複雜度有很多共同特徵,並作為根據計算難度對問題進行分類的另一種方法。
什麼是空間複雜度?
空間複雜度是一個函式,它描述了演算法根據演算法的輸入量所佔用的記憶體(空間)量。
我們經常談論的是所需的**額外記憶體**,不包括儲存輸入本身所需的記憶體。同樣,我們使用自然(但固定長度)單位來測量它。
我們可以使用位元組,但更容易使用,例如,使用的整數個數,固定大小結構的個數等。
最終,我們得出的函式將與表示該單位所需的實際位元組數無關。
有時會忽略空間複雜度,因為使用的空間很少和/或很明顯,但是有時它變得和時間複雜度一樣重要。
定義
設**M**為一個在所有輸入上都停止的確定性**圖靈機(TM)**。**M**的空間複雜度是函式$f \colon N \rightarrow N$,其中**f(n)**是**M**掃描任何長度為**M**的輸入時使用的磁帶單元格的最大數量。如果**M**的空間複雜度為**f(n)**,我們可以說**M**在空間**f(n)**內執行。
我們使用漸近符號來估計圖靈機的空間複雜度。
設$f \colon N \rightarrow R^+$為一個函式。空間複雜度類可以定義如下:
SPACE = {L | L是由O(f(n))空間確定性TM決定的語言}
SPACE = {L | L是由O(f(n))空間非確定性TM決定的語言}
**PSPACE**是在確定性圖靈機上可以用多項式空間解決的語言的集合。
換句話說,**PSPACE = Uk SPACE (nk)**
Savitch定理
與空間複雜度相關的最早定理之一是Savitch定理。根據該定理,確定性機器可以使用少量空間來模擬非確定性機器。
對於時間複雜度,這種模擬似乎需要時間呈指數增長。對於空間複雜度,該定理表明,任何使用**f(n)**空間的非確定性圖靈機都可以轉換為使用**f2(n)**空間的確定性TM。
因此,Savitch定理指出,對於任何函式$f \colon N \rightarrow R^+$,其中$f(n) \geqslant n$
NSPACE(f(n)) ⊆ SPACE(f(n))
複雜度類之間的關係
下圖描述了不同複雜度類之間的關係。

到目前為止,我們還沒有在本教程中討論P類和NP類。這些將在稍後討論。