編程基礎篇 · 你現在能做什麼
給 AI 寫的程式碼做一次複雜度體檢
算法篇的收官實戰:拿一段真實的 AI 程式碼,走一遍自報 → 優化 → 實測的完整體檢流程。三檔任務按投入挑一個,30 分鐘起步;走到第三檔,你會親眼看到 AI 自報的複雜度有沒有吹牛。
挑一檔 · 今天就動手
🥉
30 分鐘
任務一 · 自報家門
讓 AI 給自己的程式碼標註複雜度
拿一段 AI 剛寫的函式(沒有就讓它寫一個「找出兩個列表裏的共同元素」——這題它十有八九先給你 O(n²) 的版本)。把下面的提示詞甩過去,讓它自己交代快慢。
針對你剛寫的這個函式,做一次複雜度自查,用大白話回答:
1. 逐行(或逐個循環塊)標註時間複雜度,每處用一句話解釋為什麼;
2. 明確指出瓶頸行:整個函式最慢的是哪一行/哪個循環?點解係佢?
3. 彙總:整體時間複雜度和空間複雜度各是多少;
4. 翻譯成人話:數據量從 1 千漲到 100 萬,這個函式會慢多少倍?用戶的體感是「無感」「卡一下」還是「轉圈轉到懷疑人生」?
我是初學者,別堆術語,能打比方就打比方。
完成標準:你能指着程式碼説出「瓶頸在這一行,因為它是嵌套循環/挨個掃描」——説得出瓶頸行,這一檔就畢業了。
🥈
半天
任務二 · 優化一檔
要求提速,更要求説清代價
接着任務一:如果 AI 自報了 O(n²),就要求它優化到 O(n log n) 或 O(n)——但重點不是變快,是讓它説清代價。學完 ds-6 的你,要能在它的方案裏指出「空間換時間」發生在哪一行。
請把剛才這個 O(n²) 的函式優化到 O(n log n) 或 O(n),要求:
1. 新舊兩版程式碼都保留,優化的關鍵行加註釋;
2. 講清楚你用咗咩手段提速(排序後二分?換哈希表?),對應哪類算法思想;
3. 誠實交代代價:可讀性變差咗未?記憶體多用咗幾多?有冇咩場景舊版反而更好(例如數據量好細嗰陣)?
4. 如果你的方案用了「空間換時間」,明確指出是哪一行、拿多少空間換了多少時間。
最後出一道檢驗題考考我:讓我指出新版本裏「空間換時間」發生在哪,再公佈答案。
完成標準:你答對了它出的檢驗題——能親手指出「空間換時間」在哪一行,説明 ds-6 和這一章真的串起來了。
🥇
一週
任務三 · 實測打臉
用真實數據驗證它沒吹牛
複雜度是紙面推演,耗時曲綫才是鐵證。讓 AI 寫一個基準測試腳本,生成三個量級的隨機數據各跑一遍計時,親眼看優化前後的曲綫差多遠——順便檢驗它自報的複雜度有沒有吹牛。
請為新舊兩個版本的函式寫一個基準測試腳本,要求:
1. 生成三檔隨機測試數據:1 千條、10 萬條、1000 萬條(如果 1000 萬條跑不動,允許降到 100 萬並説明原因);
2. 每一檔數據,新舊兩版各跑 3 次取平均耗時,輸出一張對比表:數據量 | 舊版耗時 | 新版耗時 | 倍數差;
3. 腳本要能直接運行,話我知用咩命令跑、大概等多耐;
4. 跑完後幫我判斷:實測嘅耗時增長趨勢,同你之前自報嘅複雜度吻合未?如果不吻合(比如自稱 O(n) 卻按平方漲),誠實分析原因。
我會把實測結果貼回來,你負責解讀曲綫。
完成標準:你手上有一張三檔數據量的實測耗時表,並且能回答「實測曲綫和自報複雜度吻合未」——吻合或打臉,都算體檢完成。
🩺 體檢報告生成器 · 填三格,生成可以發羣裏的總結
三個格子都填一下,報告才完整~
點解一定要實測呢一步?AI 自報複雜度大部分時候是對的,但「大部分」不等於「每次」——隱藏在庫函式裏的排序、循環裏偷偷的字串拼接,都可能讓實際曲綫和紙面推演對不上。跑過一次基準測試的人,從此對「它説 O(n) 就是 O(n)」保持職業性懷疑,這正是驗收者該有的姿態。
✅ 這一課想和你分享的
- 體檢三步走:自報複雜度 → 優化並交代代價 → 實測驗證,一步比一步硬核
- 瓶頸行是抓手:能指出「最慢的是這一行」,驗收就有了着力點
- 優化必談代價:不談可讀性和記憶體的提速方案,都要多問一句
- 實測曲綫是鐵證:紙面複雜度可能吹牛,三檔數據量的耗時表不會