728x90
์ต์ ํ
์ต์ ํ(Min Heap)์ ์ด์ง ํธ๋ฆฌ ํํ์ ์๋ฃ๊ตฌ์กฐ๋ก, ๋ถ๋ชจ ๋ ธ๋์ ๊ฐ์ด ํญ์ ์์ ๋ ธ๋์ ๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ํน์ฑ์ ๊ฐ๋ ๊ตฌ์กฐ์ด๋ค.
- ์ ์๊ฐ ๋ณต์ก๋๋ก ์ฝ์ /์ญ์ ๊ฐ๋ฅ
- ์์ ๊ฐ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌ ๊ฐ๋ฅ
- ํน์ ๊ฐ ์ญ์ , ์์ ์ธ๋ฑ์ค ์ ๊ทผ์ด ๋นํจ์จ์ . ์ด ์์๋จ
ํน์ง
- ๋ถ๋ชจ ≤ ์์
- ๋ชจ๋ ๋ถ๋ชจ ๋ ธ๋์ ๊ฐ์ ์์ ๋ ธ๋์ ๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค.
- ๊ฐ์ฅ ์์ ๊ฐ์ด ๋ฃจํธ ๋ ธ๋์ ์์น.
- ์์ ์ด์ง ํธ๋ฆฌ
- ํธ๋ฆฌ์ ๋ชจ๋ ๋ ๋ฒจ์ด ๊ฝ ์ฐจ ์์ผ๋ฉฐ, ๋ง์ง๋ง ๋ ๋ฒจ์ ์ผ์ชฝ๋ถํฐ ์ฑ์์ ธ์ผ ํจ.
ํ์ฉ
์ต์ ํ์ ์ต์๊ฐ์ ํจ์จ์ ์ผ๋ก ์ฐพ๊ฑฐ๋ ๊ด๋ฆฌํด์ผ ํ๋ ์ํฉ์์ ์ ์ฉํ๋ค.
- ์ฐ์ ์์ ํ ๊ตฌํ
- ์ ๋ ฌ๋์ง ์์ ๋ฐ์ดํฐ์์ ์ต์๊ฐ ์ถ์ถ
- ๋ฐ์ดํฐ ์คํธ๋ฆผ์์ k๋ฒ์งธ ์์ ๊ฐ ์ ์ง
์ฐ์ฐ
- ์ฝ์
O(logโกn)
- ์ ๋ฐ์ดํฐ๋ฅผ ํธ๋ฆฌ์ ๊ฐ์ฅ ์๋(์ผ์ชฝ๋ถํฐ ์ฑ์)์ ์ฝ์ .
- ๋ถ๋ชจ์ ๋น๊ตํ์ฌ ์ฌ๋ฐ๋ฅธ ์์น์ ๋๋ฌํ ๋๊น์ง ๊ฐ์ ๊ตํ(Heapify-Up).
- ์ต์๊ฐ ์ญ์ O(logโกn)
- ๋ฃจํธ ๋ ธ๋(์ต์๊ฐ)๋ฅผ ์ ๊ฑฐ.
- ๊ฐ์ฅ ๋ง์ง๋ง ๋ ธ๋๋ฅผ ๋ฃจํธ๋ก ์ด๋ํ ํ, ์์๊ณผ ๋น๊ตํ๋ฉฐ ๊ตํ(Heapify-Down).
- ์ต์๊ฐ ์กฐํ O(1)
- ๋ฃจํธ ๋ ธ๋ ๊ฐ ๋ฐํ
๊ตฌํ ๋ฐฉ์
์ต์ ํ์ ๋ฐฐ์ด๋ก ํจ์จ์ ์ผ๋ก ๊ตฌํํ ์ ์๋ค
- ์ธ๋ฑ์ค ๊ด๊ณ
- ๋ถ๋ชจ ์ธ๋ฑ์ค : i
- ์ผ์ชฝ ์์ : 2i + 1
- ์ค๋ฅธ์ชฝ ์์: 2i + 2
์์
- ์ ๋ ฅ ๋ฐ์ดํฐ : [5, 3, 8, 1, 2]
- ์ฝ์
์์๋๋ก ์ต์ ํ ์์ฑ
- 5 ์ฝ์ → [5]
- 3 ์ฝ์ → [3, 5]
- 8 ์ฝ์ → [3, 5, 8]
- 1 ์ฝ์ → [1, 3, 8, 5] (1๊ณผ 3 ๊ตํ)
- 2 ์ฝ์ → [1, 2, 8, 5, 3] (2๊ณผ 3 ๊ตํ)
- ์ต์๊ฐ(1) ์ ๊ฑฐ
- [2, 3, 8, 5] (๋ฃจํธ ๋ ธ๋ 1 ์ ๊ฑฐ ํ 2๋ฅผ ๋ฃจํธ๋ก ์ด๋)
ํ์ด์ฌ์์ ์ต์ ํ ์ฌ์ฉ
ํ์ด์ฌ์ heapq ๋ชจ๋์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ต์ ํ์ ์ ๊ณตํ๋ฉฐ, ๋ค์๊ณผ ๊ฐ์ ์ฐ์ฐ์ ์ง์ํ๋ค.
import heapq
heap = []
heapq.heappush(heap, 5) # ์ฝ์
heapq.heappush(heap, 3)
heapq.heappush(heap, 8)
print(heapq.heappop(heap)) # ์ต์๊ฐ ์ ๊ฑฐ → 3
print(heap[0]) # ์ต์๊ฐ ํ์ธ → 5
728x90
'๐งฉ Algorithm > ๊ฐ๋ ๋ฐ ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [Algorithm] Two-Pointers(ํฌ ํฌ์ธํฐ) (3) | 2024.11.15 |
|---|---|
| [์๊ณ ๋ฆฌ์ฆ] DP (Dynamic Programming, ๋์ ๊ณํ๋ฒ) (0) | 2023.09.25 |
| [์๊ณ ๋ฆฌ์ฆ] ์๋ผํ ์คํ ๋ค์ค์ ์ฒด (1) | 2023.09.23 |
| [์๊ณ ๋ฆฌ์ฆ] BFS/DFS ์๊ณ ๋ฆฌ์ฆ (๊ทธ๋ํ ํ์) (0) | 2023.05.15 |
| Greedy (๊ทธ๋ฆฌ๋ ์๊ณ ๋ฆฌ์ฆ) (0) | 2023.05.07 |