ํ(Heap) ์๋ฃ๊ตฌ์กฐ
๊ฐ์
์ฐ์ ์์ ํ๋ฅผ ๊ตฌํํ๋ ์๋ฃ๊ตฌ์กฐ๋ค์ ๋น๊ต ๋ถ์ํด๋ณด๋ฉด, ๊ท ํ ์ด์ง ๊ฒ์ ํธ๋ฆฌ๊ฐ ์์ ์ ์ด๊ณ ์ผ๊ด๋ ์ฑ๋ฅ์ ๋ณด์ฌ์ค๋ค๋ ๊ฒ์ ํ์ธํ๋ค. ํ์ง๋ง ์ด์ง ํ(Binary Heap) ์ ํน๋ณํ ์ฅ์ ์ ๊ฐ์ง๋ค:
- ๊ฒ์, ์ฝ์ , ์ญ์ : ์๊ฐ ๋ณต์ก๋
- ์ต์/์ต๋๊ฐ ์ ๊ทผ: ์๊ฐ ๋ณต์ก๋
์ด๋ฌํ ํน์ฑ์ผ๋ก ์ธํด ์ค์๊ฐ์ผ๋ก ์ต์ฐ์ ์์ ์์์ ๋น๋ฒํ๊ฒ ์ ๊ทผํด์ผ ํ๋ ์์คํ ์์ ๋๋ฆฌ ํ์ฉ๋๋ค.
ํ์ ์ ์์ ์์ฑ
ํ์ ์์ ์ด์ง ํธ๋ฆฌ(Complete Binary Tree) ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ๋ค์ ๋ ๊ฐ์ง ํต์ฌ ์์ฑ์ ๋ง์กฑํด์ผ ํ๋ค:
1. ํ ์์ ์์ฑ (Heap Order Property)
๋ชจ๋ ๋ ธ๋๋ ์์ ๋ ธ๋๋ค๊ณผ ํน์ ํ ์์ ๊ด๊ณ๋ฅผ ์ ์งํด์ผ ํ๋ค:
- ์ต์ ํ(Min Heap): ๊ฐ ๋ ธ๋์ ๊ฐ โค ์์ ๋ ธ๋๋ค์ ๊ฐ
- ์ต๋ ํ(Max Heap): ๊ฐ ๋ ธ๋์ ๊ฐ โฅ ์์ ๋ ธ๋๋ค์ ๊ฐ
2. ์์ ์ด์ง ํธ๋ฆฌ ๊ตฌ์กฐ ์์ฑ
ํธ๋ฆฌ์ ๋์ด๋ฅผ ๋ผ ํ ๋, ๋ชจ๋ ๋ฆฌํ ๋ ธ๋๋ค์ด ๋ ๋ฒจ ๋๋ ์ ์์นํด์ผ ํ๋ค. ์ด๋ ํธ๋ฆฌ๊ฐ ์์ ์ด์ง ํธ๋ฆฌ ํํ๋ฅผ ์ ์งํจ์ ์๋ฏธํ๋ค.
๋ฐฐ์ด ๊ธฐ๋ฐ ๊ตฌํ
ํ์ ๊ฐ์ฅ ํฐ ์ฅ์ ์ค ํ๋๋ ํฌ์ธํฐ ์์ด ๋ฐฐ์ด๋ง์ผ๋ก ํจ์จ์ ์ธ ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด๋ค. ์์ ์ด์ง ํธ๋ฆฌ์ ํน์ฑ์ ํ์ฉํ์ฌ ๊ฐ ๋ ๋ฒจ์ ์์ฐจ์ ์ผ๋ก ๋ฐฐ์ด์ ์ ์ฅํ๋ค.
์์ ๊ตฌ์กฐ
17
13 6
1 4 2 5
๋ฐฐ์ด ํํ: [17, 13, 6, 1, 4, 2, 5]
์ธ๋ฑ์ค ๊ด๊ณ์
๋ ธ๋ ์ธ๋ฑ์ค๋ฅผ ๋ผ ํ ๋:
- ๋ถ๋ชจ ๋ ธ๋:
- ์ผ์ชฝ ์์:
- ์ค๋ฅธ์ชฝ ์์:
๊ฒ์ฆ ์์
์ธ๋ฑ์ค 2(๊ฐ 6)์ธ ๋ ธ๋์ ๊ด๊ณ:
- ๋ถ๋ชจ: โ ๋ ธ๋ 17 โ
- ์์๋ค: , โ ๋ ธ๋ 2, 5 โ
์ฃผ์ ์ฐ์ฐ ๊ตฌํ
์ญ์ ์ฐ์ฐ (Extract-Min/Max)
Percolate Down(ํ๋ฌ๋ด๋ฆฌ๊ธฐ) ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค:
- ๋ฃจํธ ๋ ธ๋(์ต์ฐ์ ์์ ์์) ์ ๊ฑฐ
- ๋ง์ง๋ง ๋ฆฌํ ๋ ธ๋๋ฅผ ๋ฃจํธ ์์น๋ก ์ด๋
- ํ ์์ฑ ๋ณต์์ ์ํด percolate down ์ํ:
- ํ์ฌ ๋ ธ๋์ ์์ ๋ ธ๋๋ค ๋น๊ต
- ํ ์กฐ๊ฑด์ ์๋ฐฐ๋๋ฉด ์ ์ ํ ์์๊ณผ ๊ตํ
- ์กฐ๊ฑด์ ๋ง์กฑํ๊ฑฐ๋ ๋ฆฌํ์ ๋๋ฌํ ๋๊น์ง ๋ฐ๋ณต
์๊ฐ ๋ณต์ก๋:
์ฝ์ ์ฐ์ฐ (Insert)
๋ฐ๋๋ก Percolate Up ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ๋ค:
- ์ ์์๋ฅผ ๋ง์ง๋ง ์์น(์์ ์ด์ง ํธ๋ฆฌ ์ ์ง)์ ์ฝ์
- ํ ์์ฑ ๋ณต์์ ์ํด percolate up ์ํ:
- ํ์ฌ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋ ๋น๊ต
- ํ ์กฐ๊ฑด์ ์๋ฐฐ๋๋ฉด ๋ถ๋ชจ์ ๊ตํ
- ์กฐ๊ฑด์ ๋ง์กฑํ๊ฑฐ๋ ๋ฃจํธ์ ๋๋ฌํ ๋๊น์ง ๋ฐ๋ณต
์๊ฐ ๋ณต์ก๋:
์ฑ๋ฅ ๋ถ์
| ์ฐ์ฐ | ์๊ฐ ๋ณต์ก๋ | ์ค๋ช
|
| --------- | ----------- | ------------ |
| ์ต์/์ต๋๊ฐ ์กฐํ | | ๋ฃจํธ ๋
ธ๋ ์ง์ ์ ๊ทผ |
| ์ฝ์
| | ์ํฅ ์นจํฌ ๊ณผ์ |
| ์ญ์ | | ํํฅ ์นจํฌ ๊ณผ์ |
| ํ ์์ฑ | | Bottom-up ํํ |
์ด๋ฌํ ํน์ฑ์ผ๋ก ์ธํด ํ์ ์ฐ์ ์์ ํ, ํ ์ ๋ ฌ, ๊ทธ๋ํ ์๊ณ ๋ฆฌ์ฆ์ ํต์ฌ ์๋ฃ๊ตฌ์กฐ๋ก ํ์ฉ๋๊ณ ์๋ค.