Deap์ด๋?
์์ ์ด์ง ํธ๋ฆฌ(Complete Binary Tree)์ด๋ฉฐ, ๋น์ด์๊ฑฐ๋ ๋ค์์ ๋ง์กฑ์ํค๋ ์๋ฃ๊ตฌ์กฐ์ ๋๋ค.
1. Root ๋ ธ๋๋ ์๋ฌด๋ฐ ์์๋ฅผ ๊ฐ์ง๊ณ ์์ง ์์ต๋๋ค.
2. ์ผ์ชฝ ์๋ธํธ๋ฆฌ๋ min-heap ์ ๋๋ค.
3. ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๋ max-heap ์ ๋๋ค.
๋ง์ฝ ์ค๋ฅธ์ชฝ ์๋ธํธ๋ฆฌ๊ฐ ๋น์ด์์ง ์์ ๊ฒฝ์ฐ $i_{left}$ ๋ฅผ ์ผ์ชฝ ์๋ธํธ๋ฆฌ์ ์์์ ์์๋ผ ํ๊ฒ ์ต๋๋ค.
$j_{right}$ ๋ฅผ $i_{left}$ ์ ๋์๋๋ ์ฐ์ธก ์๋ธํธ๋ฆฌ์ ์์๋ผ๊ณ ํ๊ฒ ์ต๋๋ค.
๋ง์ฝ $j_{right}$ ๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ,
$j_{right}$ ์ ์์น๋ $i_{left}$ ์ ๋ถ๋ชจ(parent)๋ ธ๋์ ๋์๋๋max-heap์ ์์๊ฐ ๋ฉ๋๋ค.
ํญ์ $i_{left}$ ๋ $j_{right}$ ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ๊ฐ์ ๊ฐ์ ธ์ผ๋ง ํฉ๋๋ค.
Deap์์ ๋์ํ๋ ์์ ์ฐพ๊ธฐ
๊ณตํต์ ์ผ๋ก ์ฌ์ฉ๋๋ ์ฑ์ง๋ถํฐ ์์๋ณด๋๋ก ํ๊ฒ ์ต๋๋ค.
(๋ฃจํธ์ ์ธ๋ฑ์ค๋ฅผ ํญ์ 1๋ก ์๊ฐํฉ๋๋ค.)
์์ ์ด์ง ํธ๋ฆฌ์์, ๋ ๋ฒจ i์์ ์กด์ฌํ ์ ์๋ ๋ ธ๋์ ์ต๋ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$$2^{i-1}$$
๋ํ ๋ ๋ฒจ i์ธ ํธ๋ฆฌ๊ฐ ๊ฐ์ง ์ ์๋ ๋ ธ๋์ ์ต๋ ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$$2^{i} - 1$$
์ ๋ ์ฑ์ง์ ์ข ํฉํ๋ฉด, ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ ๋ฒจ i์ ์ต์ข์ธก ๋ ธ๋์ ์ธ๋ฑ์ค = ๋ ๋ฒจ i-1 ์ธ ํธ๋ฆฌ๊ฐ ๊ฐ์ง ์ ์๋ ์ต๋ ๋ ธ๋์ ์ + 1
$$= 2^{i-1}$$
๋ ๋ฒจ i์ ์ต์ฐ์ธก ๋ ธ๋์ ์ธ๋ฑ์ค = ๋ ๋ฒจ i-1 ์ธ ํธ๋ฆฌ๊ฐ ๊ฐ์ง ์ ์๋ ์ต๋ ๋ ธ๋์ ์
$$ = 2^{i} - 1$$
์ธ๋ฑ์ค๊ฐ ์ฃผ์ด์ก์ ๋ ๋ ๋ฒจ ๊ตฌํ๊ธฐ
๋ ธ๋์ ์ธ๋ฑ์ค๊ฐ n์ธ ๊ฒฝ์ฐ, ํด๋น ๋ ๋ฒจ l์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$$l = [log_2(n)] + 1$$
์ฆ๋ช
๋ ๋ฒจ l์ ์์ ์ธ๋ฑ์ค ~ ๋ ๋ฒจ l์ ๋ ์ธ๋ฑ์ค ์ฌ์ด์ n์ด ์กด์ฌํด์ผ ํ๋ฉฐ, n์ ์ ์์ ๋๋ค.
$$2^{l-1} \leq n \leq 2^{l}-1 < 2^{l}$$
$$l-1 \leq log_2(n) < l$$
์ด๋ l-1๊ณผ l์ ์ ์์ด๋ฉฐ, 1๋ฐ์ ์ฐจ์ด๋์ง ์๊ธฐ์ [log2(n)]๋ l-1์ด ๋ฉ๋๋ค.
๋ฐ๋ผ์ l = [log2(n)] + 1์ด ๋ฉ๋๋ค.
Min Heap์ ๋์ํ๋ Max Heap์ ์์ ์ฐพ๊ธฐ
Min Heap์ ์ํ ๋ ธ๋์ ์ธ๋ฑ์ค๋ฅผ i๋ผ๊ณ ํ๊ฒ ์ต๋๋ค.
๋์ํ๋ Max Heap์ ์์์ ์ธ๋ฑ์ค๋ฅผ j๋ผ๊ณ ํ๋ฉด
$$j = 2^{[log_2(i)] - 1} + i$$
์ด๋ j๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ, ์ฆ j >n(๋ ธ๋์ ์)์ธ ๊ฒฝ์ฐ j๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$$j = j/2$$
์ฆ๋ช
i๋ฒ์งธ ๋ ธ๋์ ๋ ๋ฒจ k๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$$k = [log_2(i)] + 1$$
๋ ๋ฒจ k์ ์กด์ฌํ ์ ์๋ ๋ ธ๋์ ์ต๋ ๊ฐ์๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$$2^{k-1}$$
๋ ๋ฒจ k์์ Min Heap์ ์กด์ฌํ ์ ์๋ ๋ ธ๋์ ์ต๋ ๊ฐ์
= ๋ ๋ฒจ k์์ Min Heap์ ์กด์ฌํ ์ ์๋ ๋ ธ๋์ ์ต๋ ๊ฐ์
= ๋ ๋ฒจ k์ ์กด์ฌํ ์ ์๋ ๋ ธ๋์ ์ต๋ ๊ฐ์/2
$$= 2^{k-2}$$
์ฆ Min-Heap์ ๋์ํ๋ Max-Heap์ ์์น๋
$$j = i + 2^{[log_2(i)] + 1-2}$$
$$= i + 2^{[log_2(i)] - 1}$$
์ด๋ j๊ฐ ์กด์ฌํ์ง ์๋ ๊ฒฝ์ฐ, ์ฆ j > n(๋ ธ๋์ ์)์ธ ๊ฒฝ์ฐ
$$j = j/2$$
Man Heap์ ๋์ํ๋ Min Heap์ ์์ ์ฐพ๊ธฐ
Max Heap์ ์ํ ๋ ธ๋์ ์ธ๋ฑ์ค๋ฅผ j๋ผ๊ณ ํ๊ฒ ์ต๋๋ค. ๋์ํ๋ Min Heap์ ์์์ ์ธ๋ฑ์ค๋ฅผ i๋ผ๊ณ ํ๋ฉด
$$i = j - 2^{[log_2(j)] - 1} $$
์ด๋ Deap์ ์์ ์ด์ง ํธ๋ฆฌ์ด๋ฏ๋ก Max Heap์ ๋์ํ๋ Min Heap์ ์์๋ ํญ์ ์กด์ฌํฉ๋๋ค.
์์น๊ฐ ์ฃผ์ด์ก์ ๋ Max Heap์ ์ํ๋์ง ์ฌ๋ถ ํ๋จํ๊ธฐ
์์น i๊ฐ ์ํ ๋ ๋ฒจ์ k๋ผ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$$k= [log_2(i)]+1$$
Max Heap์ ์ํ๋์ง์ ์ฌ๋ถ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
$$i \geq 2^{k-1} + 2^{k-2}$$
์ด๋ ๋ค์์ max heap์์์ ์ต์ข์ธก ์์น์ ๋๋ค.
$$ 2^{k-1} + 2^{k-2}$$
Deap์์์ ์ฝ์
1. ์์๋ฅผ ๊ฐ์ฅ ๋ง์ง๋ง ์์น์ ์ฝ์ ํฉ๋๋ค.
2. ์ฝ์ ๋ ์์น๊ฐ Max Heap์ ์ํ๋์ง Min Heap์ ์ํ๋์ง ํ์ธํฉ๋๋ค.
3. Min Heap์ ์ํ๋ ๊ฒฝ์ฐ ๋์๋๋ Max Heap์ ์์์ ๋น๊ตํฉ๋๋ค.
(Max Heap์ ์ํ๋ ๊ฒฝ์ฐ 3,4,5๋ฒ์ ๊ณผ์ ์์ Min๊ณผ Max๋ฅผ ๋ฐ๋๋ก ์งํํฉ๋๋ค.)
4. Max Heap์ ์์๋ณด๋ค ์์ ๊ฒฝ์ฐ ์ฝ์ ๋ ์์น์ ๋ถ๋ชจ์ ๋น๊ตํด๊ฐ๋ฉฐ ๋ง๊ฐ์ง Min Heap์ ๋ณต๊ตฌํฉ๋๋ค.
5. Max Heap์ ์์๋ณด๋ค ํฐ ๊ฒฝ์ฐ ๋ ์์๋ฅผ ๊ต์ฒดํ ํ, ๊ต์ฒดํ Max Heap์ ์์น์์ ๋ง๊ฐ์ง Max Heap์ ๋ณต๊ตฌํฉ๋๋ค
Max Heap์ ์ฝ์
Min Heap์ ์ฝ์
Deap์์์ ์ต์๊ฐ ์ญ์
1. Min Heap์ ๋ฃจํธ๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์ด ๊ฐ์ด ์ต์๊ฐ์ ๋๋ค.
2. Min Heap์ ๋ฃจํธ๋ก๋ถํฐ ์์ํ์ฌ ๋ค์์ ๋ฐ๋ณตํฉ๋๋ค.
3. ์์ ๋ ธ๋๋ฅผ ํ์ธํฉ๋๋ค. ์กด์ฌํ๋ค๋ฉด ์์๋ค ์ค ๋ ์์ ๊ฐ์ ์์ ์ ์์น๋ก ์ฎ๊น๋๋ค.
4. ์ดํ ์์ ์ ์ธ๋ฑ์ค๋ฅผ ์์์ ์ธ๋ฑ์ค๋ก ๋ฐ๊พธ์ด์ค๋๋ค.
5. ์์ ๋ ธ๋๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด ๋ฐ๋ณต์ ์ข ๋ฃํฉ๋๋ค.
6. ๋ฐ๋ณต์ ์ข ๋ฃํ ๋ค, ๊ฐ์ฅ ๋ง์ง๋ง ๋ ธ๋๋ฅผ ๋ง์ง๋ง ์์น ์๋ฆฌ์์ ์ ๊ฑฐํ๋ฉฐ, ํ์ฌ ์์น๋ก ์ฎ๊ฒจ์ค๋๋ค.
7. Deap์ด ๋ง๊ฐ์ก์ผ๋ฏ๋ก ๋ณต๊ตฌ๋ฅผ ์งํํด์ผ ํฉ๋๋ค.
์๋๋ ๋ณต๊ตฌํ๋ ๊ณผ์ ์ ๋๋ค.
9. ๋ง์ง๋ง ๋ ธ๋๊ฐ ์ฝ์ ๋ ํ์ฌ ์์น์์ ๋์๋๋ Max Heap์ ์์์ ๋น๊ตํฉ๋๋ค.
10. ํ์ฌ ์์น(Min Heap)์ ์์๊ฐ Max Heap์ ์์๋ณด๋ค ํฌ๋ค๋ฉด ์ด๋ฅผ ๊ต์ฒดํด์ค ํ, ๋ง๊ฐ์ง ๋ Heap์ ๋ณต๊ตฌํฉ๋๋ค.(์ด๋ ์ฝ์ ๊ณผ ๋์ผํ ๊ณผ์ ์ ๋๋ค.)
11. ํ์ฌ ์์น(Min Heap)์ ์์๊ฐ Max Heap์ ์์๋ณด๋ค ์์ง ์๋ค๋ฉด ๋ง๊ฐ์ง Min-Heap์ ๋ณต๊ตฌํฉ๋๋ค.
์์ 1
์์ 2
Deap์์์ ์ต๋๊ฐ ์ญ์
์ต์๊ฐ ์ญ์ ์ ๋น์ทํฉ๋๋ค.
1. Max Heap์ ๋ฃจํธ๋ฅผ ์ ๊ฑฐํฉ๋๋ค. ์ด ๊ฐ์ด ์ต๋๊ฐ์ ๋๋ค.
2. Max Heap์ ๋ฃจํธ๋ก๋ถํฐ ์์ํ์ฌ ๋ค์์ ๋ฐ๋ณตํฉ๋๋ค.
3. ์์ ๋ ธ๋๋ฅผ ํ์ธํฉ๋๋ค. ์กด์ฌํ๋ค๋ฉด ์์๋ค ์ค ๋ ํฐ ๊ฐ์ ์์ ์ ์์น๋ก ์ฎ๊น๋๋ค.
4. ์ดํ ์์ ์ ์ธ๋ฑ์ค๋ฅผ ์์์ ์ธ๋ฑ์ค๋ก ๋ฐ๊พธ์ด์ค๋๋ค.
5. ์์ ๋ ธ๋๊ฐ ์กด์ฌํ์ง ์๋๋ค๋ฉด ๋ฐ๋ณต์ ์ข ๋ฃํฉ๋๋ค.
6. ๋ฐ๋ณต์ ์ข ๋ฃํ ๋ค, ๊ฐ์ฅ ๋ง์ง๋ง ๋ ธ๋๋ฅผ ๋ง์ง๋ง ์์น ์๋ฆฌ์์ ์ ๊ฑฐํ๋ฉฐ, ํ์ฌ ์์น๋ก ์ฎ๊ฒจ์ค๋๋ค.
7. Deap์ด ๋ง๊ฐ์ก์ผ๋ฏ๋ก ๋ณต๊ตฌ๋ฅผ ์งํํด์ผ ํฉ๋๋ค.
์๋๋ ๋ณต๊ตฌํ๋ ๊ณผ์ ์ ๋๋ค.
9. ๋ง์ง๋ง ๋ ธ๋๊ฐ ์ฝ์ ๋ ํ์ฌ ์์น์์ ๋์๋๋ Min Heap์ ์์์ ๋น๊ตํฉ๋๋ค.
10. ํ์ฌ ์์น(Max Heap)์ ์์๊ฐ Min Heap์ ์์๋ณด๋ค ํฌ๋ค๋ฉด ์ด๋ฅผ ๊ต์ฒดํด์ค ํ, ๋ง๊ฐ์ง ๋ Heap์ ๋ณต๊ตฌํฉ๋๋ค.(์ด๋ ์ฝ์ ๊ณผ ๋์ผํ ๊ณผ์ ์ ๋๋ค.)
11. ํ์ฌ ์์น(Min Heap)์ ์์๊ฐ Max Heap์ ์์๋ณด๋ค ์์ง ์๋ค๋ฉด ๋ง๊ฐ์ง Min-Heap์ ๋ณต๊ตฌํฉ๋๋ค.
์๊ฐ๋ณต์ก๋
์ฝ์ | ์ต๋๊ฐ ์ญ์ | ์ต์๊ฐ ์ญ์ |
$$Olog(n)$$ | $$Olog(n)$$ | $$Olog(n)$$ |
์๋ฐ๋ก ๊ตฌํ
https://ttl-blog.tistory.com/713
'๐ฅ Computer Science > ์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์๋ฃ๊ตฌ์กฐ] - AVL ํธ๋ฆฌ (0) | 2022.06.09 |
---|---|
[์๋ฃ๊ตฌ์กฐ] - Hash(ํด์) (0) | 2022.06.07 |
[์๋ฃ๊ตฌ์กฐ] - ์ฐ์ ์์ ํ(Priority Queue) (0) | 2022.06.06 |
[์๋ฃ๊ตฌ์กฐ] - ํ(Heap) (0) | 2022.06.06 |
[์๋ฃ๊ตฌ์กฐ] - ์ด์ง ๊ฒ์ ํธ๋ฆฌ (Binary Search Tree - BST) (0) | 2022.06.05 |