編程基礎篇 · 複雜度:一眼看穿程式碼值不值
Big-O:一眼看穿程式碼要跑多久
姊妹篇講完了「數據結構 = 收納方式」,這一章講另一半:算法 = 做事的套路。評價一個套路好不好,程序員有一把統一的尺子,叫 Big-O。別被數學符號嚇到——它回答的問題只有一個:數據變多的時候,你的程式碼會慢多少?今天用三個互動把這把尺子裝進你腦子裏。
互動一 · 四條曲綫分道揚鑣
四種常見「套路」的耗時曲綫:O(1) 灰(不管多少數據都一步到位)、O(log n) 綠(每次砍一半)、O(n) 藍(挨個過一遍)、O(n²) 紅(每個都要和每個比)。拖動滑塊把數據量從 10 拉到 10 萬,右側是按「1 億次操作/秒」換算的真實耗時。留意:前半段四條綫擠在一起——數據小時啥算法都快,這正是 Demo 騙人的原因。
先拖到最左邊再慢慢往右。n = 100 以內,四條綫全趴在地板上——這就是「Demo 階段一切正常」。拖過 1 萬,紅綫開始起飛;到 10 萬,O(n²) 已經要跑 100 秒,而綠綫還是幾乎為零。
互動二 · 數據翻十倍會怎樣
換個更直接的問法:老闆説「用戶量要翻十倍」,四種套路各自會慢多少?點「×10」按鈕,連點三次,看差距怎麼滾雪球。
當前數據量 1,000條
規律先記住:數據 ×10 時,O(1) 不變、O(log n) 只 +一點、O(n) 跟着 ×10、O(n²) 直接 ×100。點幾下按鈕驗證一下。
互動三 · 估吓呢段程式碼
尺子拿到手了,來驗一驗。三段偽程式碼,各選一個複雜度。訣竅:別讀懂每一行,只看「數據變多時,它要多幹多少活」。
點解呢把尺對你有用?你以後驗收 AI 寫的程式碼,不需要逐行看懂,只需要問一句:「呢段嘅複雜度係幾多?數據去到 10 萬條仲跑唔跑得?」AI 會老老實實告訴你。而絕大多數「上綫後越來越卡」的事故,翻開一看都是一個藏在角落裏的 O(n²)。下一課我們就去看大模型裏最有名的那個 O(n²)——注意力機制。
✅ 這一課想和你分享的
- Big-O 只看趨勢:它不關心一次跑多快,只關心「數據變多嗰陣耗時點樣升」
- 常數不重要、趨勢要命:慢 2 倍能忍,隨 n² 增長等於判死刑
- 數據小時看不出來:四條曲綫在 Demo 階段擠在一起,差距要到數據變多才爆發
- n² 是大部分卡頓事故的元兇:驗收程式碼先找嵌套循環