高考申論題
114年
[資訊處理] 資料結構
第 二 題
📖 題組:
Priority Queue(優先佇列)是一種「每次取出的元素都是優先權最高的」資料結構。
Priority Queue(優先佇列)是一種「每次取出的元素都是優先權最高的」資料結構。
📝 此題為申論題,共 4 小題
小題 (二)
如果用「未排序陣列」,來實作優先佇列,插入與取最大值的時間複雜度為何?(5 分)
思路引導 VIP
作答時應先思考『未排序陣列』的資料結構特性:插入時因無需維持順序,可直接附加於陣列末端;但取最大值時,因資料缺乏順序性,必須循序搜尋整個陣列才能找到目標。依據此結構操作特性推導時間複雜度即可精準拿分。
小題 (一)
如果用「排序好的陣列」來實作優先佇列,插入與取最大值的時間複雜度為何?(5 分)
思路引導 VIP
看到「排序好的陣列」,首先思考其物理結構特性:極值必定在陣列兩端,因此讀取極快;但陣列在記憶體中是連續儲存的,插入新元素為維持排序狀態,必須挪動後續元素,產生較高的時間開銷。
小題 (三)
如果用最大堆積(max-heap)來實作優先佇列,插入與取最大值的時間複雜度為何?(5 分)
思路引導 VIP
看到此題應先聯想最大堆積(Max-Heap)本質上是一棵完全二元樹(Complete Binary Tree),其樹高為 O(log n)。接著思考插入(Insert)與取出最大值(Extract-Max)時的資料重整過程(Heapify-up 與 Heapify-down),即可推導出兩者的時間複雜度皆與樹高成正比。
小題 (四)
請以最大堆積來實作優先佇列,並顯示以下動作過程的最大堆積樹:加入 10, 30, 50, 40,取出最大數,加入 50, 60,取出最大數。(10 分)
思路引導 VIP
看到最大堆積(Max Heap),應立即聯想其兩大特性:(1) 形狀為完全二元樹 (Complete Binary Tree);(2) 任何父節點的值必大於或等於其子節點。實作時,新增元素放在樹的最底層最後方,並執行『向上調整 (Up-Heap)』;取出最大值時,移除根節點,將最後一個節點移至根部,並執行『向下調整 (Down-Heap)』。