mirror of
https://github.com/krahets/hello-algo.git
synced 2024-12-29 10:16:30 +08:00
22 lines
1.5 KiB
Markdown
22 lines
1.5 KiB
Markdown
|
---
|
||
|
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**:資料結構的“堆積”與記憶體管理的“堆積”是同一個概念嗎?
|
||
|
|
||
|
兩者不是同一個概念,只是碰巧都叫“堆積”。計算機系統記憶體中的堆積是動態記憶體分配的一部分,程式在執行時可以使用它來儲存資料。程式可以請求一定量的堆積記憶體,用於儲存如物件和陣列等複雜結構。當這些資料不再需要時,程式需要釋放這些記憶體,以防止記憶體流失。相較於堆疊記憶體,堆積記憶體的管理和使用需要更謹慎,使用不當可能會導致記憶體流失和野指標等問題。
|