🌲 貪婪演算法與 MST

貪婪演算法 (Greedy Algorithm) 的策略非常簡單:每一步都選擇當下看起來最好的選項。 神奇的是,在某些問題中,這種短視近利的策略竟然能保證全域最佳解!

🔥 Vibe Coding 核心 Prompt

【MST 詠唱範例】 「請幫我實作 Kruskal 演算法: 1. 有 N 個城市與 M 條可建設的道路,每條路有建造成本。 2. 使用 Union-Find 資料結構。 3. 將所有道路按成本排序。 4. 從最小成本的路開始,如果加入不會形成環,就選取。 5. 輸出最小生成樹的總成本與選取的道路。 6. 用 Matplotlib 畫出 MST 圖。」

🎯 課程大綱

  1. 貪婪策略與交換論證
  2. Kruskal 與 Union-Find
  3. Prim 演算法
  4. Huffman 編碼
  5. 集合覆蓋與排程問題

課程導覽:這堂課你會學到什麼?

貪婪演算法(Greedy Algorithm)是演算法設計中最直覺也最實用的策略之一:在每一步都做當下最好的選擇

聽起來簡單,但關鍵在於:貪婪什麼時候會得到最佳解?什麼時候會失敗?

第一章:Prim 演算法與 MST

最小生成樹(MST)是貪婪成功的經典案例。你將學到如何用 Priority Queue 實作 Prim,以及 MST 在網路設計、電路佈局中的應用。

第二章:Kruskal 演算法

Kruskal 用另一種方式解決 MST——排序所有邊,從小到大選取。搭配 Union-Find 資料結構,你會學到「邊導向」的貪婪策略。

第三章:Huffman 編碼

Huffman 編碼是資料壓縮的基石。你會學到如何用二元樹和 Priority Queue 建立最佳前綴編碼,以及它與資訊熵的關係。

第四章:集合覆蓋問題

Set Cover 告訴你貪婪的極限在哪——這是 NP-hard 問題,但是貪婪演算法仍然可以給出「足夠好」的近似解。