第 9 章

堆積:優先順序與資源分配

當事情不是照先來後到,而是照重要程度安排時,就需要一種懂得排優先序的結構。這種思維,正是很多排程與資源管理系統的核心。

Heap / Priority Queue

預計閱讀時間:約 5 分鐘

資源調度 決策管理

本章開場

急診室不可能照報到順序處理所有病人,消防通報也不會因為先打進來就先處理。如果事情的處理順序要看嚴重程度、緊急性或影響範圍,那麼單純排隊已經不夠——這時就需要堆積來確保每次最重要的任務優先處理。

本章要解決的問題

當任務很多,但資源有限時,該怎麼讓最重要的事情先被看見、先被處理,而不是被埋在清單中間?

核心概念

堆積可以把它想成一種專門維持「目前最重要項目」的結構。它不像佇列那樣重視先來後到,而是讓優先權最高或最低的元素始終待在最容易被取出的地方。

這類結構適合處理動態優先序。也就是說,任務會不斷加入,優先程度也可能不同,但系統仍然要能快速知道目前最該先處理的是哪一件。

堆積的價值,不是把所有事情排得很整齊,而是讓最重要的事情隨時浮上來。
堆積(優先佇列)示意圖 心臟病發作 優先程度:緊急 最先被取出 骨折 優先程度:重要 發燒 優先程度:重要 輕微擦傷 優先程度:一般 感冒 優先程度:一般 例行覆診 優先程度:一般 新進病患 → 系統自動重新評估優先序 堆積讓最高優先項目隨時保持在頂端,不受先來後到影響
優先佇列(堆積)示意:急診室依嚴重程度排序,最危急者永遠浮在最頂層優先被處理

因此,堆積很常和排程、任務分派、資源搶占放在一起談。它幫助我們把注意力與資源先投到真正關鍵的地方。

這在生活中像什麼

急事先辦、醫院檢傷分級、活動待辦清單中的「今天一定要完成」,都很像堆積的概念。你並不是把所有事情平均看待,而是先決定什麼最重要。

搬家時也是一樣。你可能不會先整理裝飾品,而是先處理重要文件、鑰匙與日常必需品。這種把優先項目先拉出來的思路,就是堆積式思考。

具體例子

  1. 急診室檢傷分級:不管誰先到診,輕傷病人可能排在心臟病發作的病人之後,因為優先標準是狀態嚴重程度,而非報到順序。
  2. 手機電量管理:讓優先充電的是電量最低的設備。隨時有新設備加入,系統都能自動重新判斷「目前最小電量的是哪一台」,即時調整充電順序。
  3. 工作待辦清單優先排序:不是照新增順序,而是每次揀選「限期最迫的」或「影響最大的」作為下一件處理。這就是堆積式優先序在日常工作中的影子。
  4. 天氣預報警報系統:同時有多區回報傳送進來,系統先處理風雨警報,再處理小雨區域的一般預報,因為優先標準是影響範圍與緊迫程度。
  5. 電商促銷期出貨排程:雙十一期間,網站同時收到大量訂單。系統不是照進單時間處理,而是先運算哪些訂單能最快出貨(庫存充足、距離最近),優先處理這些,提升整體出貨效率。

這在工作上有什麼用

系統排程器、客服緊急工單、伺服器資源分配、專案中的高風險事項追蹤,都會碰到優先順序問題。當資源有限,不可能所有事情同時做時,就必須有方法把高優先項目先頂上來。

例如資訊團隊面對十張工單時,若其中一張是整站服務中斷,那它一定要先處理。這時候若還照報單順序做事,後果往往很嚴重。堆積的思維,正是讓重要度成為順序規則的一部分。

為什麼重要

  • 它能讓資源先用在最重要的事情上。
  • 它適合動態任務與不斷變化的優先序。
  • 它幫助流程兼顧效率與影響力,而不是只看排隊順序。

當然,前提是優先規則要合理。如果優先權定義混亂,或每件事都被說成最重要,堆積也救不了流程。結構只是工具,真正關鍵仍是判斷標準是否清楚。

一句話總結

堆積像一個會自動把重點推到前面的機制,讓重要的事不會被埋沒。

💭 捲輊三問

  1. 你的工作任務清單,有沒有按照「緊急程度」排序?還是全部混在一起?
  2. 如果你是急診室護理師,你用什麼邏輯決定誰先看?這個邏輯符合堆積的概念嗎?
  3. 堆積每次只保證「頂端是最重要的」,你覺得這對你的每日工作計畫有什麼啟發?
下一章

各種結構都學完了,真實系統是怎麼把它們組合起來協同運作的?