mirror of
https://github.com/krahets/hello-algo.git
synced 2024-12-28 20:16:28 +08:00
1.5 KiB
1.5 KiB
comments |
---|
true |
8.4 小結
1. 重點回顧
- 堆積是一棵完全二元樹,根據成立條件可分為大頂堆積和小頂堆積。大(小)頂堆積的堆積頂元素是最大(小)的。
- 優先佇列的定義是具有出列優先順序的佇列,通常使用堆積來實現。
- 堆積的常用操作及其對應的時間複雜度包括:元素入堆積 $O(\log n)$、堆積頂元素出堆積
O(\log n)
和訪問堆積頂元素O(1)
等。 - 完全二元樹非常適合用陣列表示,因此我們通常使用陣列來儲存堆積。
- 堆積化操作用於維護堆積的性質,在入堆積和出堆積操作中都會用到。
- 輸入
n
個元素並建堆積的時間複雜度可以最佳化至O(n)
,非常高效。 - Top-k 是一個經典演算法問題,可以使用堆積資料結構高效解決,時間複雜度為
O(n \log k)
。
2. Q & A
Q:資料結構的“堆積”與記憶體管理的“堆積”是同一個概念嗎?
兩者不是同一個概念,只是碰巧都叫“堆積”。計算機系統記憶體中的堆積是動態記憶體分配的一部分,程式在執行時可以使用它來儲存資料。程式可以請求一定量的堆積記憶體,用於儲存如物件和陣列等複雜結構。當這些資料不再需要時,程式需要釋放這些記憶體,以防止記憶體流失。相較於堆疊記憶體,堆積記憶體的管理和使用需要更謹慎,使用不當可能會導致記憶體流失和野指標等問題。