空間復雜度,空間優(yōu)化思路是極簡
空間復雜度 O(n) 算法執(zhí)行過程中額外申請的存儲空間不包括輸入數(shù)據(jù)空間優(yōu)化技術從空間復雜度的角度進行空間優(yōu)化時顧名思義就是讓空間復雜度不復雜思路就是極簡不額外申請不留的銷毀/釋放只留當前所需不得不留的壓縮。什么是空間復雜度數(shù)組arr 有 1 億個元素都叫total。那么數(shù)組的空間復雜度O(1)。因為不管 arr 有 1 個元素還是 1 億個total 就一個變量。for x in arr: total x return total # 空間復雜度 O(1)不管 arr 多大total 始終一個變量包含一億個 int的 數(shù)組空間復雜度算法層面O(1)沒開新數(shù)組數(shù)組本身占用內(nèi)存1 億 × 4 字節(jié) 400 MB跟算法無關實際占的物理空間叫footprint不等于空間復雜度。又開個等長數(shù)組呢空間復雜度變成O(1億)了因為額外開了個和輸入一樣大的數(shù)組。def copy(arr): return [x for x in arr] # 空間復雜度 O(n)額外開了一個等長數(shù)組算法的空間復雜度O(n)就是給這個算法額外申請多大空間快速排序的空間復雜度O(log n)—— arr 是輸入不算遞歸棧是額外開的算。隨著遞歸分區(qū)棧層數(shù)加深后進先出彈出后棧幀銷毀遞歸棧呆著的內(nèi)存空間是額外申請的。def quicksort(arr): quicksort_helper(arr, 0, len(arr)-1) # 遞歸棧給這個遞歸棧申請多大空間呢上面知道數(shù)組的空間復雜度是O(1)分區(qū)1次棧層數(shù)1平均情況下O(log n)層那么快速排序需要的臨時空間——平均空間復雜度就是O(log n)。最壞空間復雜度是O(n2。數(shù)據(jù)實際占的空間有沒有用有用但它在另一個層面叫內(nèi)存占用 / footprint不叫空間復雜度。工程上關心的幾個真實指標指標含義例子字面量空間數(shù)據(jù)結構實際占的字節(jié)struct Node { int val; Node* next; }占 16 字節(jié)空間復雜度算法額外開的空間遞歸棧、臨時數(shù)組駐留集RSS進程實際占的物理內(nèi)存看top命令對象頭開銷每個對象的元數(shù)據(jù)Java開銷小Python開銷大整個算法占用的空間≈數(shù)據(jù)結構實際占的字節(jié)算法額外開的空間進程實際占的物理內(nèi)存每個對象的元數(shù)據(jù)常見算法 / 數(shù)據(jù)結構復雜度速查表1、基礎數(shù)據(jù)結構數(shù)據(jù)結構 / 操作時間平均時間最壞空間適用場景數(shù)組按下標訪問O(1)O(1)O(n)隨機訪問順序查找O(n)O(n)O(1)無序線性查找二分查找O(log n)O(log n)O(1)有序數(shù)組冒泡 / 選擇 / 插入排序O(n2)O(n2)O(1)小數(shù)據(jù)、教學歸并排序O(n log n)O(n log n)O(n)穩(wěn)定排序、大數(shù)據(jù)快速排序O(n log n)O(n2)O(log n)通用排序首選堆排序O(n log n)O(n log n)O(1)原地排序、Top K哈希表查找O(1)O(n)O(n)鍵值映射BST二叉搜索樹O(log n)O(n)O(n)有序數(shù)據(jù)AVL / 紅黑樹O(log n)O(log n)O(n)平衡有序B 樹 / B 樹O(log n)O(log n)O(n)磁盤存儲、數(shù)據(jù)庫索引跳表O(log n)O(n)O(n)有序集合、RedisTrie前綴樹O(m)O(m)O(Σ·m)字符串前綴、自動補全并查集路徑壓縮O(α(n)) ≈ O(1)O(log n)O(n)連通性問題2、按問題選數(shù)據(jù)結構的決策樹速記同一個問題不同數(shù)據(jù)結構空間差很多存 1000 個點、10000 條邊的圖鄰接表O(VE) 1.1 萬鄰接矩陣O(V2) 100 萬差了將近 100 倍所以稀疏圖千萬別用鄰接矩陣。需求選查第 K 大 / 動態(tài) Top K堆范圍求和 單點修改樹狀數(shù)組 / 線段樹前綴匹配Trie連通性判斷并查集最短路Dijkstra / SPFA字符串匹配KMP / Z 算法區(qū)間最值ST 表 / 線段樹緩存 / 鍵值查找哈希表 LRU充分理解空間復雜度有什么用可以從空間復雜度角度進行空間優(yōu)化??臻g優(yōu)化思路是極簡不浪費不額外申請不留的銷毀/釋放只留當前所需不得不留的壓縮。常用的空間優(yōu)化技術有滾動數(shù)組在動態(tài)規(guī)劃中只保留當前計算所需的前幾行/列數(shù)據(jù)而非整個二維表格將空間從 O(n2) 降至 O(n)。狀態(tài)壓縮用位運算等技巧將多維狀態(tài)壓縮到一維或?qū)顟B(tài)用整數(shù)表示減少存儲開銷。推導式 / 遞推數(shù)據(jù)邊用邊銷毀不保留中間完整副本例如流式處理或迭代計算。局部變量作用域及時釋放臨時變量避免不必要的長生命周期占用內(nèi)存。原地算法直接在輸入數(shù)據(jù)上修改不額外申請等規(guī)模存儲空間。數(shù)據(jù)分塊 / 懶加載只加載當前需要處理的數(shù)據(jù)塊而非一次性載入全部數(shù)據(jù)。fivebliss

相關新聞

大模型讓閉源驅(qū)動走向末路?逆向成本趨零,廠商定價策略或被顛覆!

大模型讓閉源驅(qū)動走向末路?逆向成本趨零,廠商定價策略或被顛覆!

【導語:7月20日,開源運動精神圖騰之一Eric S. Raymond宣稱“閉源驅(qū)動已死”,他用大模型直接從Windows驅(qū)動二進制文件得到源碼。此前也有研究者稱LLM能逆向驅(qū)動。但逆向仍有極限,且法律問題待解,產(chǎn)業(yè)格局也需調(diào)整?!看蟆?/p>

2026/8/1 4:49:46 閱讀更多
Python圖像預處理:灰度化與二值化技術詳解

Python圖像預處理:灰度化與二值化技術詳解

1. 為什么需要圖像預處理?在計算機視覺和圖像處理領域,原始圖像往往不能直接用于分析或識別。就像攝影師在暗房沖洗照片需要調(diào)整曝光和對比度一樣,數(shù)字圖像也需要經(jīng)過一系列預處理步驟才能更好地服務于后續(xù)任務。Pillow作為Python生態(tài)中最流行…

2026/8/1 5:59:48 閱讀更多
利用Edge瀏覽器本地OCR免費識別數(shù)學公式并轉(zhuǎn)換為LaTeX代碼

利用Edge瀏覽器本地OCR免費識別數(shù)學公式并轉(zhuǎn)換為LaTeX代碼

1. 從“截圖識別”到“公式自由”:一個被忽視的瀏覽器原生能力作為一名長期與學術文檔、技術報告打交道的從業(yè)者,我深知在數(shù)字世界里處理數(shù)學公式的痛點。無論是從PDF文獻里摘錄一個復雜的積分式,還是在網(wǎng)頁上看到一個精美的公式想“據(jù)為己有…

2026/8/1 5:59:48 閱讀更多
數(shù)字化建設提速 300%+,這家互聯(lián)網(wǎng)集團做對了什么?

數(shù)字化建設提速 300%+,這家互聯(lián)網(wǎng)集團做對了什么?

百特搭客戶案例統(tǒng)一入口、權限、流程、連接,不只是一次項目交付,而是一條可復制、可演進、可承接 AI 的平臺化建設路徑。核心結果:整體數(shù)字化建設速度提升300%,從多系統(tǒng)并行走向平臺化沉淀。01 / 案例背景復雜組織、多套系統(tǒng)并行&…

2026/8/1 5:49:47 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應用材料(Applied Materials)公司生產(chǎn)的一款用于半導體設備的I/O信號分配電路板。該型號(0100-02186)的核心特點如下:專用于Endura等半導體工藝腔室。集成信號路由與分配功能。連接控制…

2026/8/1 0:09:33 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機,適用于自動化設備及通用機械驅(qū)動。該型號(FFMN-32L-10-T0 40AX)的核心特點如下:三相交流異步電動機。額定…

2026/8/1 0:09:33 閱讀更多
AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O 分配 PCB

AMAT 0100-02186 I/O分配PCB板是應用材料(Applied Materials)公司生產(chǎn)的一款用于半導體設備的I/O信號分配電路板。該型號(0100-02186)的核心特點如下:專用于Endura等半導體工藝腔室。集成信號路由與分配功能。連接控制…

2026/8/1 0:09:33 閱讀更多
Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機

Nissei Corp FFMN-32L-10-T0 40AX 三相異步電動機是日本日清(Nissei)品牌的一款工業(yè)用三相異步電機,適用于自動化設備及通用機械驅(qū)動。該型號(FFMN-32L-10-T0 40AX)的核心特點如下:三相交流異步電動機。額定…

2026/8/1 0:09:33 閱讀更多