ํHeap ์ด๋?
์ ๋ฒ ์๊ฐ์ ์ฐ์ ์์ ํ๋ฅผ ์๋ฃ๊ตฌ์กฐ๋ณ๋ก ๊ตฌํํ ๋์ ์ฅ๋จ์ ์ ๋ณด์๋ค. ํนํ ๊ท ํ ์ด์ง ๊ฒ์ ํธ๋ฆฌ๋ก ๊ตฌํํ๋ค๋ฉด ๊ฐ์ฅ ์์ ์ ์ด๋ฉด์ ๋น ๋ฅธ $O(logn)$ ๋ณต์ก๋๋ก ์ฝ์ ๊ณผ ์ญ์ ๊ฐ ์ด๋ฃจ์ด์ง๋ ๊ฒ์ ๋ณด์๋ค. ๊ทธ๋ฐ๋ฐ ์ด์ง ํ์ ํตํด ๊ตฌํํ๋ฉด๊ฒ์, ์ฝ์ , ์ญ์ ์๋ $O(logn)$์ ๋ณต์ก๋๋ฅผ ๊ฐ์ง์ง๋ง, ์ต์/์ต๋ ๊ฐ ์ฐพ๊ธฐ์๋ $O(1)$์ ๋ณต์ก๋๋ฅผ ๊ฐ์ง ์ ์๋ค๊ณ ํ๋ค. (์์ฃผ ํ์ฌ ์ํฉ์ ํ์ธํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์์ฃผ ์ฌ์ฉ๋ ๊ฒ์ด๋ผ๋ ๊ฑธ ์ ์ ์๋ค.)
ํ์ ์์ฑ
ํธ๋ฆฌ์ ๋น์ทํ๋ค. (๋ช ๊ฐ์ง ์์ฑ์ ๊ฐ์ง๋ ํธ๋ฆฌ์ด๋ค.) ๊ทธ๋ฆฌ๊ณ ์ฌ์ฉ๋๋ ๊ฑฐ์ ๋ชจ๋ ํ์ ์ด์ง ํ binary heap์ด๋ฏ๋ก ์ด์ง ํ์ ๊ธฐ์ค์ผ๋ก ์ดํด๋ณธ๋ค.
- ํ์ ๊ธฐ๋ณธ ์๊ตฌ์ฌํญ์ ๋
ธ๋์ ๊ฐ์ด ๊ทธ ์์ ๋
ธ๋ '์ด์' ํน์ '์ดํ'์ฌ์ผ ํ๋ค. (ํ ์์ฑ)
- MIn Heap : ๋ ธ๋์ ๊ฐ์ด ์์ ๋ ธ๋์ ๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์(์ดํ)์ผ๋ง ํ๋ค.
- Max Heap : ๋ ธ๋์ ๊ฐ์ด ์์ ๋ ธ๋์ ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์(์ด์)์ผ๋ง ํ๋ค.
- ํธ๋ฆฌ์ ๋์ด h๊ฐ ์์๋, ๋ชจ๋ ๋ฆฌํ ๋ ธ๋๋ค์ด hํน์ h-1 ๋ ๋ฒจ์ ์์ด์ผํ๋ค. (์ฆ '์์ complete ์ด์ง ํธ๋ฆฌ'์ฌ์ผ ํ๋ค.)
๊ตฌํ
ํธ๋ฆฌ์ ๋ฌ๋ฆฌ ๋ฐฐ์ด์ ์ฌ์ฉํด์, ์ฆ ํฌ์ธํฐ ์์ด ์ธ๋ฑ์ค๋ง ์ฌ์ฉํด ๊ตฌํํ ์ ์๋ค. ๋ฃจํธ๋ถํฐ ์์ํด์ ๊ฐ ๋ ๋ฒจ๋ณ๋ก ์์๋๋ก ๋ฐฐ์ด์ ์์น์ํจ๋ค.
17
13 6
1 4 2 5
์ด๊ฑธ ๋ฐฐ์ด์ ๋ด์ผ๋ฉด [17, 13, 6, 1, 4, 2, 5] ์ด ๋๋ค.
๋ถ๋ชจ, ์์ ๋ ธ๋ ์ฐพ๊ธฐ
์ด๋ค ๋
ธ๋์ ์ธ๋ฑ์ค i๋ฅผ ๊ฐ์ง๊ณ ๋ถ๋ชจ, ์์ ๋
ธ๋์ ์ธ๋ฑ์ค๋ฅผ ์ฐพ์ ์ ์๋ค.
๋ถ๋ชจ : (i-1)/2
์์ : (i*2)+1, (i*2)+2
6๋
ธ๋์ ์ธ๋ฑ์ค 2๋ก ์ง์ ๊ตฌํด๋ณด์.
(2-1)/2=0์ด๋ฏ๋ก 0๋ฒ์งธ ๋
ธ๋์ธ 17์ด ๋ถ๋ชจ๊ฐ ๋ง๊ณ ,
(2*2)+1=5, (2*2)+2=6์ด๋ฏ๋ก 5,6๋ฒ์งธ ๋
ธ๋์ธ 2์ 5๊ฐ ์์์ด ๋ง๋ค.
์ญ์
Percolate Down(ํ๋ฌ๋ด๋ฆฌ๊ธฐ) ๋ฐฉ์์ด๋ผ๊ณ ๋ถ๋ฅธ๋ค.
๋ชจ๋ ์ฐ์ ์์ ํ์ ๋ฃจํธ ๋ ธ๋๋ง ์ ๊ฑฐํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ์ฅ ๋ง์ง๋ง ๋ ธ๋๋ฅผ ๋ฃจํธ ์๋ฆฌ์ ๋ฃ๊ณ . (ํ ์กฐ๊ฑด์ ์๋ฐฐํ๊ฒ ๋๋ค.) ๊ทธ ํ์ percolate down ๋ฐฉ์์ผ๋ก ํ์ผ๋ก ๋ง๋ค์ด์ค๋ค. ๋ฃจํธ ๋ ธ๋์ ์ผ์ชฝ๊ณผ ์ค๋ฅธ์ชฝ ์์์ ๋น๊ตํ๋ค. ์กฐ๊ฑด์ ๋ง์ง ์๋ ๊ฒฝ์ฐ ๋ถ๋ชจ์ ํด๋น ์์์ ์์น๋ฅผ ๋ฐ๊พผ๋ค. ๊ทธ๋ ๊ฒ ๋ฆฌํ ๋ ธ๋๊น์ง
์ฝ์
๊ฑฐ๊พธ๋ก percolate up ๋ฐฉ์์ด๋ผ๊ณ ํ๋ค. ์ผ๋จ ๋งจ ๋ง์ง๋ง ๋ ธ๋์ ์๋ก์ด ๋ ธ๋๋ฅผ ์ถ๊ฐํ๊ณ ๋ถ๋ชจ์ ๋น๊ตํด๋ด์ ์กฐ๊ฑด์ ๋ง์ผ๋ฉด ๊ทธ๋๋ก ๋์ด๊ฐ์ง๋ง, ์กฐ๊ฑด์ ๋ง์ง ์๋ ๊ฒฝ์ฐ ๊ณ์ ๋ถ๋ชจ์ ๋ฐ๊ฟ์ค๋ค.