Instagram 的演算法、YouTube 的推薦、導航 App 的最短路徑——
這些你每天體驗的東西,都是資料結構在運作。
而且,你早就在用資料結構思考了,只是還不知道它的名字。
每張卡片是你每天都做的事。先猜猜背後的資料結構,再點開看答案。先備知識激活
沒有資料結構:平均要比對 50 億次。有了正確的資料結構:最多只需要 33 次。
拉動下方滑桿,親眼看這個差距。主動處理原則 Mayer 2009
敘事說服理論告訴我們:故事比說教更能讓人真正理解。看看兩個工程師面對同一個問題時,思路有什麼不同。敘事說服 Green & Brock 2000
AI 能幫你生成程式碼,但看不懂、改不動、不知道哪裡錯——這些問題 AI 解決不了。下面三個情境,讓你親眼看見「基礎知識的缺口」在哪裡。效用價值 Eccles et al. 1983
能有效使用 AI 輔助寫程式的人,都具備一個關鍵能力:「看懂 AI 給的程式碼,並判斷它是否正確」。這需要你懂得:資料結構的選擇邏輯、演算法的時間複雜度、程式語法的意義。沒有這些基礎,你只能「複製貼上然後祈禱」——而不是真正的協作。
// 這是什麼?不知道 struct Node { string name; Node* next; // ← 這行是什麼? }; void insertFront(Node*& head, string n){ Node* p = new Node(); // ← new? p->name = n; p->next = head; // ← 為什麼這樣? head = p; } // 名單順序全錯了 😭 // 不知道哪裡出問題
// Node = 資料 + 指向下一個的指標 struct Node { string name; Node* next; // ← 指標,指向下一節點 }; void insertFront(Node*& head, string n){ Node* p = new Node(); // 動態建立節點 p->name = n; p->next = head; // 新節點指向舊 head head = p; } // 程式本身沒錯! // insertFront 本來就是倒序 // → 應改用 insertBack 或最後 reverse
// AI 給的版本,能跑但很慢 for (int i = 0; i < n; i++) { for (int j = i+1; j < n; j++) { if (s[i] == s[j]) cout << "重複: " << s[i]; } } // 10,000 個學生跑了 30 秒 // 不知道為什麼這麼慢 // 這是 O(n²) 的寫法 // 但不懂就不知道怎麼改
// 知道 O(n²) 太慢 // 跟 AI 說:「請用 O(n) 的方法」 unordered_set<string> seen; for (int i = 0; i < n; i++) { if (seen.count(s[i])) cout << "重複: " << s[i]; seen.insert(s[i]); } // 同樣 10,000 個學生:0.001 秒 // 差了 30,000 倍 // 因為懂「Set 查找是 O(1)」
「幫我寫一個選課系統, 可以新增、刪除、查詢課程」 AI 可能給你: → 用 Array 儲存所有課程 → 每次搜尋從頭掃到尾 O(n) → 等待名單用 Array 亂插 你不知道這樣不好, 因為你不知道有更好的選擇。
「幫我寫一個選課系統: - 課程編號唯一,用 Hash Map 讓查詢是 O(1) - 等待名單用 Queue(先到先得) - 先修關係用 Tree/Graph 表達」 AI 現在能給你 真正適合這個問題的架構 你也能判斷它給的對不對 因為你知道每個選擇的理由
你每天都在用的東西,背後是資料結構。
你想駕馭 AI 而不是被它牽著走,需要資料結構。
選一個你最好奇的地方,開始吧。