100 Days of Python — Roadmap
已完成 Day 01–21(linked list → 選擇問題與 Top-K)。以下為 Day 22–100 的規劃。
原則:經典資料結構/演算法壓到最精簡 (相似的主題同一天講完、順手帶到它的平行版本),
把省下來的篇幅全部灌進 LLM 內核與強化學習,最後 6 天做中型專案,把前面 94 天的積木組起來。
2026-08-20 改版重點:
經典段從原本的 Day 12–52 壓成 Day 12–43(省下 9 天):MST、最短路、分治排序、
平衡樹、機率型結構、字串等主題各自合併。
平行/並行不另闢章節 ,融進各主題:排序那天講 parallel merge / sample sort,
非比較排序那天講 scan (prefix-sum),圖那天講平行 BFS 與 Δ-stepping,
Day 43 收成系統性的 work-depth 模型,LLM 段接 continuous batching,RL 段接 fully async。
強化學習從 10 天擴成 23 天(Day 72–94) ,而且重心放在演算法本身:
Day 72–89 照 Tianshou / CleanRL / TorchRL / SB3 / RLlib 真正實作了什麼來排
(DQN 家族與 distributional、TRPO/PPO、DDPG/TD3/SAC、HER/ICM/RND、offline RL、
GAIL、MARL、model-based 與 MCTS);Day 90–93 才轉到 LLM 後訓練與大規模 RL 基礎設施,
對照 radixark/miles (SGLang rollout + Megatron trainer,
從 slime fork)看 rollout engine × trainer、TITO、fully async、MoE routing replay、
低精度穩定性與容錯。Miles 只佔 4 天:它是把前面演算法放大到生產規模的案例,不是主角。
接續 Day 11 的圖表示法,把圖演算法一次走完。
Day
主題
配套題 / 備註
12
BFS / DFS 走訪與應用 ✅
LC 200 島嶼數量
13
拓樸排序(Kahn + DFS 兩種寫法)✅
LC 207 課程表;DAG、循環偵測
14
Union-Find(路徑壓縮 + 按秩合併)✅
LC 547 省份數量
15
最小生成樹 — Kruskal ✅
接 Day 14;Prim 併到 Day 16 一起講
16
Prim 的最小生成樹與 Dijkstra 的最短路徑,其實是同一支演算法 ✅
LC 743;接 Day 05 heap。兩者只差 key 是「邊權」還是「距離和」
17
負權與全點對:Bellman-Ford / SPFA / Floyd-Warshall ✅
LC 787;負權環偵測=套利;Floyd 就是三層迴圈的 DP,k 必須在最外層
18
Tarjan:強連通分量、橋、關節點 ✅
LC 1192;disc/low 一次 DFS 三種讀法;跳過的是「邊」不是「父節點」;少了 on_stack 會把分量黏在一起
19
A* 與平行圖搜尋 ✅
第一次碰 heuristic,AI 的橋樑;順帶 frontier 展開的平行 BFS、Δ-stepping
Part 2 — 排序與搜尋(Day 20–23)
四天講完,每天都帶一個「這東西怎麼平行做」。
Day
主題
備註
20
分治排序:Quick sort + Merge sort + 它們的平行版 ✅
三路 partition、最壞情況、外部排序;parallel merge、sample sort、work-depth 直覺
21
選擇問題:Heap sort、Top-K、Quickselect、中位數、Reservoir sampling ✅
接 Day 05;串流取樣;radix select 與 GPU top-k kernel(grid barrier、#3610 死鎖、ties)
22
非比較排序:counting / radix / bucket ✅
O(n) 的條件;平行 counting sort 的骨架就是 prefix-sum (scan)
23
二分搜尋的三種邊界寫法 ✅
「在答案上二分」;LC 34/33/875/410;sglang 的五處邊界搜尋(graph bucket、cu_seqlens、radix cache gallop、qps autotune)
Part 3 — 字串演算法(Day 24–27)
Day
主題
備註
24
Trie 與 Radix / Patricia Tree ✅
自動完成 + IP 路由表;longest prefix match;sglang RadixCache 的 split / page 對齊 / leaf-only LRU(RadixAttention 的地基)
25
字串匹配:KMP + Rabin-Karp
failure function、rolling hash
26
Suffix Array + LCP 與 Aho-Corasick
後綴結構與多模式匹配一起講
27
編輯距離與相似度:Levenshtein、Jaccard、MinHash
為 Day 66 檢索鋪路
Part 4 — 進階樹、區間與機率型結構(Day 28–32)
Day
主題
備註
28
平衡樹一次講完:AVL、Red-Black、B-Tree
接 Day 04;旋轉 → 顏色 → 磁碟頁
29
區間結構:Segment Tree(lazy)+ Fenwick
同一類問題的兩種寫法
30
LRU / LFU Cache
LC 146;為 Day 57 KV cache 鋪路
31
Skip List
Redis sorted set;Day 67 HNSW 的地基
32
機率型結構:Bloom Filter、HyperLogLog、Count-Min Sketch
用準確度換空間
Part 5 — 動態規劃、貪心與回溯(Day 33–39)
Day
主題
備註
33
DP 入門:爬樓梯、硬幣找零
回顧 Day 08 word break
34
背包問題(0/1、完全、多重)
35
LIS 與 LCS
36
區間 DP 與樹形 DP
矩陣鏈乘、戳氣球、樹上背包
37
狀態壓縮 DP(TSP)
對照 Day 93 用 GA 解 TSP
38
貪心:區間排程、Huffman 編碼
Day 52 BPE 的編碼直覺
39
回溯與剪枝:N-Queens、數獨
為 Day 92 MCTS 鋪路
Part 6 — 數學與工程基本功(Day 40–43)
Day
主題
備註
40
位元運算技巧
mask、popcount
41
質數篩、快速冪、GCD、模運算
42
隨機化演算法與蒙地卡羅
為 RL 鋪路
43
並行與平行模型:GIL、multiprocessing、asyncio、work-depth、map-reduce
把前面各天散落的平行討論收成一套模型;為 Day 65 / 88 / 99 鋪路
Part 7 — 機器學習底層(Day 44–51)
刻意壓縮:經典 ML 用兩天打包,把篇幅留給 LLM 與 RL。
Day
主題
備註
44
numpy 向量化與自動微分直覺
手刻 mini autograd
45
梯度下降家族:SGD、momentum、Adam
46
線性迴歸與邏輯迴歸
從零推導
47
反向傳播 + 純 numpy MLP
全系列的分水嶺
48
k-means 與 KNN
兩個一起寫
49
決策樹 / 隨機森林 / Gradient Boosting
三個一起寫
50
PCA / SVD / t-SNE
降維一次講完
51
評估與正則化:交叉驗證、overfitting、metrics
Part 8 — LLM 內核(Day 52–65)
全部用 numpy / 少量 torch 從零實作。
Day
主題
備註
52
BPE Tokenizer 從零實作
接 Day 38 Huffman
53
Attention 機制
QKV、softmax 數值穩定
54
Multi-Head Attention 與 Transformer Block
55
位置編碼:sinusoidal、RoPE、ALiBi
56
從零訓一個 char-level mini-GPT
里程碑:能生成文字
57
KV Cache
接 Day 30 快取;prefill vs decode
58
RadixAttention:前綴共享的 KV cache
Day 24 radix tree + Day 30 LRU 驅逐;SGLang 的核心
59
Paged Attention 與顯存管理
本質是分頁記憶體配置器
60
取樣策略:temperature、top-k、top-p
Day 72 bandit 的探索直覺
61
Beam search 與 speculative decoding
62
量化:INT8 / FP8 / GPTQ 基礎
為 Day 90 低精度訓練鋪路
63
MoE 與路由(top-k gating、load balance)
為 Day 89 routing replay 鋪路
64
FlashAttention 概念:tiling 與 online softmax
65
Continuous batching 與推論排程器
接 Day 43 並行;Day 86 rollout engine 的地基
Part 9 — 檢索、RAG 與記憶層(Day 66–71)
Day
主題
備註
66
Embedding 與向量相似度檢索
word2vec、cosine、暴力搜尋當 baseline
67
HNSW 近似最近鄰
接 Day 31 Skip List
68
IVF 與 Product Quantization
69
BM25、hybrid search 與 rerank
接 Day 25 rolling hash
70
Chunking 策略與 minimal RAG pipeline
端到端可跑
71
記憶層:短期 / 長期 / episodic memory
Day 97 專案的地基
Part 10 — 強化學習:演算法全覆蓋(Day 72–89)
這 18 天的選材直接照著幾套主流框架真正實作了什麼來排:覆蓋度參照 Tianshou ,
每天的程式碼寫成 CleanRL 那種「一支檔案從 rollout 到 optimizer.step() 看得完」的風格,
架構名詞對照 TorchRL 的 primitives(TensorDict / collector / replay buffer / loss module),
數字跟 Stable-Baselines3 對照當 sanity check,分散式的部分看 RLlib (Ray actor-learner)。
Day
主題
備註
72
環境介面:Gymnasium API、wrapper、向量化環境與 collector
reset/step/terminated vs truncated;接 Day 43 並行,向量化就是 batch 化的 rollout
73
Multi-Armed Bandit:ε-greedy、UCB、Thompson
接 Day 42 隨機化;對照 Day 60 取樣溫度
74
MDP:Value Iteration 與 Policy Iteration
GridWorld;接 Part 5 的 DP
75
Monte Carlo 與 TD Learning:n-step、TD(λ)
bias-variance 的第一次現身
76
Q-Learning 與 SARSA(表格式)
on-policy vs off-policy 的分水嶺
77
DQN 家族:replay buffer、target network、Double、Dueling、PER
replay buffer 用 Day 21 的取樣結構,PER 用 Day 29 的 segment tree
78
Distributional RL:C51、QR-DQN、IQN → Rainbow
學分布不只學期望值;分位數回歸
79
REINFORCE 與 policy gradient
log-prob 技巧、baseline 降變異
80
A2C 與 GAE
advantage estimation 的 λ 取捨
81
NPG 與 TRPO:自然梯度與信賴域
Fisher 矩陣、KL 約束,PPO 的前身
82
PPO 與那些真正決定成敗的實作細節
clipping、優勢正規化、value clipping、observation 正規化
83
連續控制:DDPG 與 TD3
決定性策略、twin critic、target policy smoothing、延遲更新
84
SAC:最大熵 RL
自動溫度調整;REDQ / CrossQ 的 sample efficiency 觀點
85
稀疏獎勵與探索:HER、ICM、RND
事後重標記與好奇心;對照 Day 91 的可驗證獎勵
86
Offline RL:BCQ、CQL、IQL、TD3+BC
distribution shift、保守價值估計;接 Day 76 off-policy
87
模仿學習:BC、DAgger、GAIL
GAIL 的判別器就是學出來的 reward,直通 Day 90 reward model
88
Multi-Agent:self-play、MAPPO、QMIX
值分解與 CTDE;呼應 Day 98 多代理協作
89
Model-based 與規劃:Dyna、PSRL、MCTS、世界模型(Dreamer 概念)
接 Day 39 回溯 + Day 19 A* + Day 73 UCB;MCTS 實作井字棋 / 連四
Part 11 — LLM 後訓練與 RL 基礎設施(Day 90–93)
把前面 18 天的演算法搬到語言模型上,順便看清「大規模 RL 訓練框架長什麼樣」。
實作參照 Miles (SGLang rollout + Megatron trainer,從 slime fork)與 SGLang 本身。
Day
主題
備註
90
RLHF 全景:reward model 從零訓 + DPO / SimPO
Bradley-Terry loss;把 Day 56 的 mini-GPT 拿來 align
91
GRPO / GSPO / REINFORCE++ 與 RLVR
group-relative advantage:為什麼 LLM RL 丟掉 critic;可驗證獎勵與 reward hacking
92
RL 訓練框架的骨架:rollout engine × trainer
接 Day 65 continuous batching:推論引擎當環境、TITO、權重同步、fully async 與 staleness
93
大規模的魔鬼細節
MoE routing replay(接 Day 63)、FP8 / MXFP8 / NVFP4 低精度穩定性(接 Day 62)、容錯與 observability
Day
主題
備註
94
演化與無梯度優化:GA、模擬退火、PSO、CMA-ES
用 GA 解 Day 37 的 TSP;演化 vs 梯度,對照 Day 79 policy gradient
Part 13 — 中型專案:LLM Agent Harness(Day 95–100)
前面 94 天的零件,這裡組成一個能跑的東西。
Day
主題
備註
95
Agent Harness I:tool calling 與 JSON action loop
工具註冊表、schema 驗證、重試
96
Agent Harness II:接上記憶層
用 Day 71 + Day 67 HNSW
97
Agent Harness III:ReAct / planner 與多步推理
錯誤恢復、預算控制
98
Multi-Agent 協作與任務 DAG 排程
呼應 Day 13 拓樸排序 + Day 88 MARL
99
Eval Harness:LLM-as-judge、回歸測試、追蹤
也是 Day 91 verifier 的延伸
100
收官:100 天知識地圖 + 效能剖析 + 打包開源
Day 05 heap → Day 16 Prim / Dijkstra、Day 21 heap sort、Day 67 HNSW 的候選集
Day 13 拓樸排序 → Day 98 多代理任務 DAG
Day 14 Union-Find → Day 15 Kruskal
Day 22 prefix-sum (scan) → Day 43 平行模型 → Day 92 async rollout 排程
Day 24 Trie / Radix Tree → Day 58 RadixAttention
Day 29 Segment Tree → Day 77 prioritized replay buffer
Day 30 LRU → Day 57 KV cache → Day 58 RadixAttention(radix tree + LRU 驅逐)→ Day 59 paged attention
Day 31 Skip List → Day 67 HNSW
Day 37 狀壓 TSP → Day 94 GA 解 TSP(精確 vs 啟發式對照)
Day 38 Huffman → Day 52 BPE
Day 39 回溯 → Day 89 MCTS
Day 42 隨機化 → Day 73 bandit → Day 60 取樣策略(探索與溫度是同一件事)
Day 43 asyncio / work-depth → Day 65 continuous batching → Day 72 向量化環境 → Day 92 fully async RL → Day 95 agent loop
Day 56 mini-GPT → Day 90 RLHF / DPO → Day 91 GRPO → Day 95–100 專案
Day 62 量化 → Day 93 低精度 RL 訓練
Day 63 MoE 路由 → Day 93 rollout routing replay
Day 65 推論排程器 → Day 92 rollout engine(同一個引擎,一個對外服務、一個當 RL 環境)
Day 76 off-policy → Day 86 offline RL → Day 92 async 的 staleness 容忍度
Day 80 GAE / Day 82 PPO → Day 91 GRPO(同一個 advantage,換成 group 內相對比較)
Day 87 GAIL 判別器 → Day 90 reward model(都是學出來的獎勵)
Day 91 verifier → Day 99 eval harness