從零開始 · Python

演算法學習地圖

一頁一個主題,照著路線圖一關一關解鎖。點卡片進入,每頁都能點左上角回到這裡。

計算中…

第 0 關 · 地基

O(1) ~ O(n!)

Big O 時間複雜度

演算法的靈魂。學會看效率,才不會寫出資料一多就當掉的程式。

開始學 →

資料結構

O(1)

陣列與字串

最基本的容器,靠編號直接抓資料。附「直取 vs 搬家」視覺化。

開始學 →
O(1)

鏈結串列

節點牽著節點,插入刪除只改指標 O(1),查找要走訪 O(n)。附節點指標視覺化。

開始學 →
O(1)

堆疊 Stack

後進先出,像疊起來的盤子。push/pop 全 O(1),附疊盤子互動操場。

開始學 →
O(1)

佇列 Queue

先進先出,像排隊買珍奶。用 deque 兩端 O(1),附排隊互動操場。

開始學 →
O(1)

雜湊表 Hash Table

用鑰匙直接算出位置,查找 O(1) 的解題神器。附雜湊 + 碰撞視覺化。

開始學 →
O(log n)

樹與二元搜尋樹

分岔結構,左小右大,查找平均 O(log n)。附 BST 搜尋路徑視覺化。

開始學 →
O(log n)

堆積 Heap

最大或最小值永遠在頂端(peek O(1)),優先佇列的引擎。附上浮插入視覺化。

開始學 →
O(V+E)

圖 Graph

節點加邊,能表達任何關係網。附 BFS / DFS 走訪動畫。

開始學 →

搜尋

O(n)

線性搜尋

一個一個找,O(n)。最萬用、不用排序,附掃描視覺化。

開始學 →
O(log n)

二分搜尋

已排序時每次砍一半。新手第一個「聰明」演算法,附一步步視覺化。

開始學 →
O(V+E)

廣度優先 BFS

一層層往外擴,不加權時保證最短步數。附迷宮水波視覺化。

開始學 →
O(V+E)

深度優先 DFS

一條路走到底再回頭。回溯與拓樸排序的基礎,附迷宮回溯視覺化。

開始學 →

排序

O(n²)

氣泡排序

相鄰兩兩比,大的往後冒。附可一步步走的排序動畫。

開始學 →
O(n²)

選擇 / 插入排序

每輪挑最小、或像整理撲克牌。附選擇 vs 插入步進動畫。

開始學 →
O(n log n)

合併排序

切一半各自排好再合併。學分治的第一課,附合併步進器。

開始學 →
O(n log n)

快速排序

選基準,小的丟左大的丟右。實務最常用,附 partition 步進器。

開始學 →

遞迴與進階

O(n)~O(2ⁿ)

遞迴 Recursion

函式自己呼叫自己,大問題拆小問題。附呼叫堆疊視覺化。

開始學 →
O(n log n)

分治 Divide & Conquer

分、治、合。合併/快速排序都是這派。附分→治→合視覺化。

開始學 →
O(n!)

回溯 Backtracking

走不通就退回換一條。解迷宮、數獨。附四皇后回溯視覺化。

開始學 →
O(n)~O(n²)

動態規劃 DP

把算過的答案記下來,避免重複計算。附爬樓梯填表視覺化。

開始學 →
O(n log n)

貪婪演算法

每步都選當下最好的,不回頭。附找零視覺化(含失敗反例)。

開始學 →

解題招式

O(n)

雙指標

兩個指標從頭尾夾,或一快一慢。把 O(n²) 壓到 O(n),附頭尾夾視覺化。

開始學 →
O(n)

滑動視窗

會伸縮的窗框,求連續一段的最佳解。附固定視窗最大和視覺化。

開始學 →
O(1)

前綴和

先算累加和,之後查區間和都 O(1)。附建表 + 區間查詢視覺化。

開始學 →

🚀 進階主題(選修)

O(L)

字典樹 Trie

把單字拆成字母掛成樹,前綴共用。自動補全、拼字檢查的基礎,附建樹視覺化。

開始學 →
≈O(1)

並查集 Union-Find

管理「誰跟誰同一國」。合併集合、查連通,附 union/find 森林視覺化。

開始學 →
O(E log V)

Dijkstra 最短路徑

加權圖找最短路,優先佇列挑最近的。地圖導航就靠它,附鬆弛動畫。

開始學 →
O(n+m)

KMP 字串比對

在文字裡找樣式,失敗時靠失敗函數跳、不整個回頭。附失敗跳躍視覺化。

開始學 →
O(log n)

樹狀陣列 Fenwick

可以隨時改值的前綴和,更新/查詢都 O(log n)。兼談線段樹,附位元跳格視覺化。

開始學 →
O(V·E)~O(V³)

Bellman-Ford / Floyd-Warshall

負權邊也能算、還能抓負環;Floyd 一次求全點對最短路。附逐輪鬆弛動畫。

開始學 →
O(E log V)

A* 尋路

Dijkstra 加方向感,f=g+h 朝終點直奔。地圖與遊戲尋路首選,附格子尋路動畫。

開始學 →
O(V+E)

拓樸排序

把有先後相依的事情排成一條直線。排課、編譯、任務排程都靠它,附 Kahn 入度法動畫。

開始學 →
O(log n)

線段樹 + 懶標記

區間查詢與區間更新全 O(log n)。懶標記是殺手鐧,比 Fenwick 更萬用,附 push down 動畫。

開始學 →
O(log n)

平衡樹 AVL / 紅黑樹

BST 照順序插入會歪成鏈,自平衡樹靠旋轉保持矮胖。附 BST 退化 vs AVL 旋轉動畫。

開始學 →
O(E log V)

最小生成樹 Kruskal / Prim

用最少總成本把所有點連起來。電網、道路、光纖骨幹都靠它,附 Kruskal vs Prim 動畫。

開始學 →
O(n)

Manacher 最長回文

O(n) 找最長回文子串。插分隔符統一奇偶、靠鏡射跳過重複比較,附逐位置半徑動畫。

開始學 →
O(n+m+z)

AC 自動機 Aho-Corasick

一次比對一大堆關鍵字。Trie + KMP 失敗函數,掃一遍找出全部。附建 fail 指標與比對動畫。

開始學 →
O(n log n)

後綴陣列 Suffix Array

把所有後綴排好序,子串搜尋、找重複全變快。配 LCP 是字串瑞士刀,附 banana 排序動畫。

開始學 →
O(log n)

快速冪 / 矩陣快速冪

算 aⁿ 不用乘 n 次。平方+看二進位壓成 O(log n),矩陣版秒算費氏數。附 3¹³ 與 M¹³ 動畫。

開始學 →