---
comments: true
---

# 8.4 &nbsp; 小結

### 1. &nbsp; 重點回顧

- 堆積是一棵完全二元樹，根據成立條件可分為大頂堆積和小頂堆積。大（小）頂堆積的堆積頂元素是最大（小）的。
- 優先佇列的定義是具有出列優先順序的佇列，通常使用堆積來實現。
- 堆積的常用操作及其對應的時間複雜度包括：元素入堆積 $O(\log n)$、堆積頂元素出堆積 $O(\log n)$ 和訪問堆積頂元素 $O(1)$ 等。
- 完全二元樹非常適合用陣列表示，因此我們通常使用陣列來儲存堆積。
- 堆積化操作用於維護堆積的性質，在入堆積和出堆積操作中都會用到。
- 輸入 $n$ 個元素並建堆積的時間複雜度可以最佳化至 $O(n)$ ，非常高效。
- Top-k 是一個經典演算法問題，可以使用堆積資料結構高效解決，時間複雜度為 $O(n \log k)$ 。

### 2. &nbsp; Q & A

**Q**：資料結構的“堆積”與記憶體管理的“堆積”是同一個概念嗎？

兩者不是同一個概念，只是碰巧都叫“堆積”。計算機系統記憶體中的堆積是動態記憶體分配的一部分，程式在執行時可以使用它來儲存資料。程式可以請求一定量的堆積記憶體，用於儲存如物件和陣列等複雜結構。當這些資料不再需要時，程式需要釋放這些記憶體，以防止記憶體流失。相較於堆疊記憶體，堆積記憶體的管理和使用需要更謹慎，使用不當可能會導致記憶體流失和野指標等問題。
