免費開始練習
高考申論題 114年 [資訊處理] 資料結構

第 三 題

📖 題組:
Priority Queue(優先佇列)是一種「每次取出的元素都是優先權最高的」資料結構。
📝 此題為申論題,共 4 小題

小題 (三)

如果用最大堆積(max-heap)來實作優先佇列,插入與取最大值的時間複雜度為何?(5 分)

思路引導 VIP

看到此題應先聯想最大堆積(Max-Heap)本質上是一棵完全二元樹(Complete Binary Tree),其樹高為 O(log n)。接著思考插入(Insert)與取出最大值(Extract-Max)時的資料重整過程(Heapify-up 與 Heapify-down),即可推導出兩者的時間複雜度皆與樹高成正比。

🤖
AI 詳解
AI 專屬家教

【解題關鍵】最大堆積的底層結構為完全二元樹,其高度為 O(log n)。 【解答】 使用最大堆積(Max-Heap)實作優先佇列時,相關操作的時間複雜度如下:

小題 (一)

如果用「排序好的陣列」來實作優先佇列,插入與取最大值的時間複雜度為何?(5 分)

思路引導 VIP

看到「排序好的陣列」,首先思考其物理結構特性:極值必定在陣列兩端,因此讀取極快;但陣列在記憶體中是連續儲存的,插入新元素為維持排序狀態,必須挪動後續元素,產生較高的時間開銷。

🤖
AI 詳解
AI 專屬家教

使用「排序好的陣列」實作優先佇列,其時間複雜度如下:

  1. 插入(Insert):$O(N)$。 雖然可以透過二元搜尋以 $O(\log N)$ 找到新元素應插入的位置,但因陣列為連續的記憶體配置,必須將該位置後方的所有元素向後平移以挪出空間,搬移元素的成本為 $O(N)$,故總時間複雜度為 $O(N)$。

小題 (二)

如果用「未排序陣列」,來實作優先佇列,插入與取最大值的時間複雜度為何?(5 分)

思路引導 VIP

作答時應先思考『未排序陣列』的資料結構特性:插入時因無需維持順序,可直接附加於陣列末端;但取最大值時,因資料缺乏順序性,必須循序搜尋整個陣列才能找到目標。依據此結構操作特性推導時間複雜度即可精準拿分。

🤖
AI 詳解
AI 專屬家教

使用「未排序陣列(Unsorted Array)」實作優先佇列時,其操作之時間複雜度如下:

  1. 插入(Insert):O(1) 說明:因為陣列無需維持排序狀態,當有新元素加入時,只需將其直接放置於陣列末端(即目前最後一個元素的下一個位置)即可完成,此操作僅需常數時間。

小題 (四)

請以最大堆積來實作優先佇列,並顯示以下動作過程的最大堆積樹:加入 10, 30, 50, 40,取出最大數,加入 50, 60,取出最大數。(10 分)

思路引導 VIP

看到最大堆積(Max Heap),應立即聯想其兩大特性:(1) 形狀為完全二元樹 (Complete Binary Tree);(2) 任何父節點的值必大於或等於其子節點。實作時,新增元素放在樹的最底層最後方,並執行『向上調整 (Up-Heap)』;取出最大值時,移除根節點,將最後一個節點移至根部,並執行『向下調整 (Down-Heap)』。

🤖
AI 詳解
AI 專屬家教

【解題思路】利用最大堆積(Max Heap)的「完全二元樹」與「父節點值 ≥ 子節點值」特性,新增節點採向上調整(Up-Heap),取出最大值(根節點)則將最後一個節點移至根部並採向下調整(Down-Heap)。 【詳解】 Step 1:加入 10

🏷️ 相關主題

優先佇列:概念、實作與應用
查看更多「[資訊處理] 資料結構」的主題分類考古題

📝 同份考卷的其他題目

查看 114年[資訊處理] 資料結構 全題