跳轉至

小結

重點回顧

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

Q & A

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

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