🌲 貪婪演算法與 MST
貪婪演算法 (Greedy Algorithm) 的策略非常簡單:每一步都選擇當下看起來最好的選項。 神奇的是,在某些問題中,這種短視近利的策略竟然能保證全域最佳解!
🔥 Vibe Coding 核心 Prompt
【MST 詠唱範例】
「請幫我實作 Kruskal 演算法:1. 有 N 個城市與 M 條可建設的道路,每條路有建造成本。2. 使用 Union-Find 資料結構。3. 將所有道路按成本排序。4. 從最小成本的路開始,如果加入不會形成環,就選取。5. 輸出最小生成樹的總成本與選取的道路。6. 用 Matplotlib 畫出 MST 圖。」
🎯 課程大綱
- 貪婪策略與交換論證
- Kruskal 與 Union-Find
- Prim 演算法
- Huffman 編碼
- 集合覆蓋與排程問題
課程導覽:這堂課你會學到什麼?
貪婪演算法(Greedy Algorithm)是演算法設計中最直覺也最實用的策略之一:在每一步都做當下最好的選擇。
聽起來簡單,但關鍵在於:貪婪什麼時候會得到最佳解?什麼時候會失敗?
第一章:Prim 演算法與 MST
最小生成樹(MST)是貪婪成功的經典案例。你將學到如何用 Priority Queue 實作 Prim,以及 MST 在網路設計、電路佈局中的應用。
第二章:Kruskal 演算法
Kruskal 用另一種方式解決 MST——排序所有邊,從小到大選取。搭配 Union-Find 資料結構,你會學到「邊導向」的貪婪策略。
第三章:Huffman 編碼
Huffman 編碼是資料壓縮的基石。你會學到如何用二元樹和 Priority Queue 建立最佳前綴編碼,以及它與資訊熵的關係。
第四章:集合覆蓋問題
Set Cover 告訴你貪婪的極限在哪——這是 NP-hard 問題,但是貪婪演算法仍然可以給出「足夠好」的近似解。