ํ Heap
[2022.09.18] ๋ชจ๊ฐ์ฝ์์ ํ์ด ๊ธฐ์ต๋๋๊ณ ๋ฌผ์๋๋ฐ '์ด์ง ํธ๋ฆฌ..'๋ผ๊ณ ๋ฐ์ ์ค๋ช ๋ชปํด์ ์๊ทน ๋ฐ์.
ํ Heap
- ์์ ์ด์ง ํธ๋ฆฌ์ ์ผ์ข ์ผ๋ก ์ฐ์ ์์ ํ๋ฅผ ์ํ์ฌ ๋ง๋ค์ด์ง ์๋ฃ๊ตฌ์กฐ.
- ๋ถ๋ชจ ๋ ธ๋์ ํค ๊ฐ์ด ์์ ๋ ธ๋์ ํค ๊ฐ๋ณด๋ค ํญ์ ํฐ(์์) ์ด์ง ํธ๋ฆฌ๋ฅผ ๋งํ๋ค.
- ์ต๋๊ฐ์ด๋ ์ต์๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ์๋ด๋๋ก ๋ง๋ค์ด์ง.
- ์ผ์ข ์ ๋ฐ์ ๋ ฌ ์ํ(๋์จํ ์ ๋ ฌ ์ํ)
- ํฐ ๊ฐ์ด ์์ ๋ ๋ฒจ์ ์๊ณ ์์ ๊ฐ์ด ํ์ ๋ ๋ฒจ์ ์๋ค๋ ์ ๋
- ํ ํธ๋ฆฌ์์๋ ์ค๋ณต๋ ๊ฐ์ ํ์ฉํ๋ค. (์ด์ง ํ์ ํธ๋ฆฌ์์๋ ์ค๋ณต๋ ๊ฐ์ ํ์ฉํ์ง ์๋๋ค.)
์๊ฐ๋ณต์ก๋
- ํ์ ๋ฐ ์ฐ์ฐ ์๊ฐ๋ณต์ก๋ : $O(logn)$
์ด์งํธ๋ฆฌ์ ๋ง๋จ ๋ ธ๋์ ๊ฐ์ด ์๋ค๋ฉด ๋์ด($h$)๋งํผ ํ์ํด์ผ ํจ.
[์๋๋ก์ด๋](์๋๋ก์ด๋ Android)
$$
์๊ฐ๋ณต์ก๋ = O(h)
$$
์์ ์ด์งํธ๋ฆฌ์ด๋ฏ๋ก
$$
\begin{align}
(2^{(h-1)}-1) +1 \leq ;&n \leq 2^h-1\\log(n+1) \leq ;&h \leq logn + 1 \\\end{align}
$$
๋ฐ๋ผ์,
$$
์๊ฐ๋ณต์ก๋ = O(h) = O(logn+1) = O(logn)
$$
- ํ ์ ๋ ฌ ์๊ฐ๋ณต์ก๋ : $O(nlogn)$
n๊ฐ์ ๋ ธ๋๊ฐ ๊ฐ๊ฐ heapifyํด์ผ ํจ.
ํ์ ์ข ๋ฅ
ํ์ฉ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ์ ํ
- N๋ฒ์งธ ํฐ ์/์์ ์
- ์ค๊ฐ๊ฐ ๊ตฌํ๊ธฐ (Two heaps)
- k๊ฐ์ ๋ฐฐ์ด ํฉ์น๊ธฐ
- ์ต์๊ฐ
References
- ์ํค๋ฐฑ๊ณผ - ํ (์๋ฃ ๊ตฌ์กฐ) https://ko.wikipedia.org/wiki/ํ_(์๋ฃ_๊ตฌ์กฐ)
- [์๋ฃ๊ตฌ์กฐ] ํ(heap)์ด๋ https://gmlwjd9405.github.io/2018/05/10/data-structure-heap.html
- ๋ชจ๊ฐ์ฝ '์ฌ๊ฐ๋ฐ์ฝ๋ฉ' annyeong๋ ๋ฐํ์๋ฃ : <์ํค์์ - JS heap>