ํ(Heap)
0. ์์ฝ
์ต์ ํ ๊ตฌํํ๊ธฐ
1. ๊ฐ์
์์ ์ด์ง ํธ๋ฆฌ์ ์ผ์ข ์ธ ํ์ ๋ํด ์ ๋ฆฌํ๋ค.
์ฐธ๊ณ ํ ๋งํ ์ฝ๋ฉ ํ ์คํธ ๋ฌธ์
2. ์ฐ์ ์์ ํ๋?
ํ์ ๋ํด ์ดํด๋ณด๊ธฐ ์ ์ฐ์ ์์ ํ์ ๋ํด ๋จผ์ ์ดํด๋ณด์. ์ฐ์ ์์ ํ์ ๋จผ์ ์ดํด๋ณด๋ ์ด์ ๋ ํ์ด ์ฐ์ ์์ ํ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ๊ณ ์๋ ์์ ์ด์ง ํธ๋ฆฌ ํํ์ ์๋ฃ๊ตฌ์กฐ์ด๊ธฐ ๋๋ฌธ์ด๋ค.
ํ(Queue): ๋จผ์ ๋ค์ด์ค๋ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋๊ฐ๋ FIFO ํ์์ ์๋ฃ๊ตฌ์กฐ
์ฐ์ ์์ ํ(Priority Queue): ๋จผ์ ๋ค์ด์จ ๋ฐ์ดํฐ๊ฐ ์๋๋ผ, ์ฐ์ ์์๊ฐ ๋์ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋๊ฐ
์ฃผ์ ํด์ผํ ์ ์ ์ฐ์ ์์ ํ๋ ์๋ฃ๊ตฌ์กฐ๊ฐ ์๋ ๊ฐ๋ ์ด๋ผ๋ ๊ฒ์ด๋ค. ๋ํ ์ฐ์ ์์ ํ๊ฐ ํ์ด๋ผ๋ ๊ฒ๋ ์๋๋ค. ์ฆ, ์ฐ์ ์์ ํ๋ผ๋ ๊ฐ๋ ์ ์ ์ฉํ๊ธฐ ์ํด ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ผ๋ก ์ดํดํ๋๋ก ํ์.
์ฐ์ ์์ ํ๋ ๋ฐฐ์ด, ์ฐ๊ฒฐ ๋ฆฌ์คํธ, ํ์ผ๋ก ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค. ์ด ์ค ํ์ผ๋ก ๊ตฌํํ๋ ๊ฒ์ด ๊ฐ์ฅ ํจ์จ์ ์ด๋ค.
์ฐ์ ์์ ํ์ ์ฌ์ฉ ์ฌ๋ก๋ ์๋์ ๊ฐ๋ค.
์๋ฌผ๋ ์ด์ ์์คํ
๋คํธ์ํฌ ํธ๋ํฝ ์ ์ด
์ด์ ์ฒด์ ์์์ ์์ ์ค์ผ์ฅด๋ง
3. ํ์ด๋?
์์ ์ด์ง ํธ๋ฆฌ์ ์ผ์ข
์ฌ๋ฌ ๊ฐ ์ค, ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ์๋ด๋๋ก ๋ง๋ค์ด์ง ์๋ฃ๊ตฌ์กฐ
์ผ์ข ์ ๋ฐ์ ๋ ฌ ์ํ(๋์จํ ์ ๋ ฌ ์ํ)๋ฅผ ์ ์ง
ํฐ ๊ฐ์ด ์์ ๋ ๋ฒจ์ ์๊ณ ์์ ๊ฐ์ด ํ์ ๋ ๋ฒจ์ ์๋ค๋ ์ ๋
์ค๋ณต๋ ๊ฐ์ ํ์ฉ(์ด์ง ํ์ ํธ๋ฆฌ์์๋ ์ค๋ณต๋ ๊ฐ์ ํ์ฉํ์ง ์์)
4. ํ์ ์ข
๋ฅ
์ต๋ ํ(max heap)
๋ถ๋ชจ ๋ ธ๋์ ํค ๊ฐ์ด ์์ ๋ ธ๋์ ํค ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์์ ์ด์ง ํธ๋ฆฌ
์ต์ ํ(min heap)
๋ถ๋ชจ ๋ ธ๋์ ํค ๊ฐ์ด ์์ ๋ ธ๋์ ํค ๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ ์ด์ง ํธ๋ฆฌ
5. ํ ๊ตฌํํ๊ธฐ
ํ์ ๊ตฌํ ํ๊ธฐ ์ ๋ช ๊ฐ์ง ์ฌํญ์ ์ง๊ณ ๋์ด๊ฐ์.
ํ์ ์ ์ฅํ๋ ํ์ค์ ์ธ ์๋ฃ๊ตฌ์กฐ๋ก ๋ฐฐ์ด์ ์ด์ฉํ๋ค.
๊ตฌํ์ ์ฝ๊ฒ ํ๊ธฐ ์ํด ๋ฐฐ์ด์ ์ฒซ ๋ฒ์งธ ์ธ๋ฑ์ค์ธ 0์ ์ฌ์ฉ๋์ง ์๋๋ค.
ํน์ ์์น์ ๋ ธ๋ ๋ฒํธ๋ ์๋ก์ด ๋ ธ๋๊ฐ ์ถ๊ฐ๋์ด๋ ๋ณํ์ง ์๋๋ค.
๋ถ๋ชจ ๋ ธ๋์ ์์ ๋ ธ๋์ ๊ด๊ณ
์ผ์ชฝ ์์์ ์ธ๋ฑ์ค = (๋ถ๋ชจ์ ์ธ๋ฑ์ค) * 2
์ค๋ฅธ์ชฝ ์์์ ์ธ๋ฑ์ค = (๋ถ๋ชจ์ ์ธ๋ฑ์ค) * 2 + 1
๋ถ๋ชจ์ ์ธ๋ฑ์ค = Math.floor(์์์ ์ธ๋ฑ์ค / 2)
์์ ๋ด์ฉ์ ๋ฐํ์ผ๋ก ์ต์ ํ์ ๊ตฌํํ๋ค.
5-1. ํ์ ๊ธฐ๋ณธ ๊ตฌ์กฐ
this.heap
์ ๋ฐฐ์ด๋ก ์ด์ฉํ์ฌ ์ ์ธ์ ํ๊ณ ์ฒซ ๋ฒ์งธ ์์๋ null
๋ก ์ ์ฅํ๋ค.
5-2. ํ์ ์์ ์ถ๊ฐํ๊ธฐ
์ต์ ํ์ ๋ถ๋ชจ ๋ ธ๋๊ฐ ์ ์ผ ์์์ผ ํ๋ค. ํ์ฌ ๋ ธ๋์ ๋ถ๋ชจ ๋ ธ๋์ ๊ฐ์ ๋น๊ตํ์ฌ ๋ถ๋ชจ ๋ ธ๋์ ๊ฐ์ด ํฌ๋ค๋ฉด ๊ทธ ๋์ ์๋ก ๋ฐ๊พธ์ด ์ค๋ค.
๋ง์ฝ ํ์ฌ ๋ ธ๋์ ์ธ๋ฑ์ค๊ฐ 1์ด๊ฑฐ๋ ํ์ฌ ๋ ธ๋๊ฐ ๋ถ๋ชจ ๋ ธ๋ ๋ณด๋ค ๊ฐ์ด ์๋ค๋ฉด ๋ฐ๋ณต๋ฌธ ๋ ์ด์ ์คํ๋์ง ์๋๋ค.
5-3. ํ์ ์์ ์ ๊ฑฐํ๊ธฐ
๊ฐ์ฅ ์์ ์์๋ ํญ์
this.heap[1]
์ ์์นํ๋ค. ์ด๋ฅผvalue
์ ํ ๋นํ๋ค.๊ฐ์ ๋จผ์ ํด์ผ ํ ๊ณผ์ ์ ๋ฐฐ์ด์
this.heap
์ ๋ง์ง๋ง ์์๋ฅผroot
์์น์ ๋ฐฐ์นํ๋ ๊ฒ์ด๋ค.๋ฃจํธ๋ง ์๋ ์ํฉ
์์์ ์ด๋ ์์ด ๋ฐ๋ก
value
๋ฅผ ๋ฐํํ๋ค.
์ผ์ชฝ ์์ ํ๋๋ง ์๋ ์ํฉ
์ผ์ชฝ ์์์ ๊ฐ๊ณผ ํ์ฌ ์ธ๋ฑ์ค์ ๊ฐ์ ๋น๊ตํ์ฌ ์ผ์ชฝ ์์์ ๊ฐ์ด ๋ ์์ผ๋ฉด ๋ ๊ฐ์ ๊ฐ์ ์๋ก ๋ฐ๊พผ๋ค.
์ผ์ชฝ ์์๊ณผ ์ค๋ฅธ์ชฝ ์์์ด ๋ชจ๋ ์๋ ๊ฒฝ์ฐ
์๋์ ๋ฐ๋ณต๋ฌธ์ ์คํํ๋ค.
์ผ์ชฝ ์์๊ณผ ์ค๋ฅธ์ชฝ ์์์ ๊ฐ ์ค ํ๋๋ผ๋ ํ์ฌ ์ธ๋ฑ์ค์ ๊ฐ ๋ณด๋ค ์์ผ๋ฉด ๋ฐ๋ณต๋ฌธ์ ๊ณ์ ์คํ๋๋ค. ์ฆ, ๋ถ๋ชจ์ ๊ฐ์ด ์์๋ค์ ๊ฐ ๋ณด๋ค ์์์ ธ์ผ ๋ฐ๋ณต๋ฌธ์ ์ข ๋ฃ๋๋ค.
์ผ์ชฝ ์์๊ณผ ์ค๋ฅธ์ชฝ ์์์ ๊ฐ์ ๋น๊ตํ์ฌ ๋ ์์ ๊ฐ์ ๊ฐ์ง๋ ์ธ๋ฑ์ค๋ฅผ
min_index
์ ํ ๋นํ๋ค. ์ด๋ ์ค๋ฅธ์ชฝ ์์์ ๊ฐ์ด ์๋ค๋ฉด ๋น๊ต ๊ฐ์ ํญ์false
๊ฐ ๋๋ฏ๋ก ์ด์ ์ ์ ์ํด์ผ ํ๋ค.๋ถ๋ชจ์ ๊ฐ๊ณผ ์์์ ๊ฐ(๋ ์์)์ ๋น๊ตํ์ฌ ๋ถ๋ชจ์ ๊ฐ ๋ณด๋ค ์์์ ๊ฐ์ด ๋ ์์ผ๋ฉด ๋ ๊ฐ์ ๊ฐ์ ์๋ก ๋ฐ๊พผ๋ค.
๋ค์ ๋น๊ต๋ฅผ ์ํด ๊ฐ๊ฐ์ ๊ฐ๋ค์ ๋ฐ๊พผ๋ค.
6. Conclusion
์ด๋ฒ ํ์ ์์๋ฅผ ์ ๊ฑฐํ๋ ๊ณผ์ ์ ์ ๋ฆฌํ๋ฉด์ ํด๋น ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํด ํธ๋ฆฌ์ ์์๋ฅผ ์ญ์ ํ๋ ๊ฒ๋ ๊ฐ๋ฅํ์ง ์์๊น๋ผ๋ ์๊ฐ์ ํ์๋ค. ์ง๊ธ๊น์ง ๋ดค๋ ์๋ฃ๊ตฌ์กฐ ์ค ๊ฐ์ฅ ๋ฉ์๋๊ฐ ๊ธธ์๋ ๊ฒ ๊ฐ๋ค. ํนํ ์์์ ์ญ์ ๊ฐ ๊ธธ์๋๋ฐ ์ ๊ธฐํ ๊ฒ์ ๋ฐฐ์ด, ์ฐ๊ฒฐ ๋ฆฌ์คํธ๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ ์์ ํ๋ฅผ ๊ตฌํํ๋ ๊ฒ๋ณด๋ค ํ์ผ๋ก ๊ตฌํํ๋ ๊ฒ์ด ์๊ฐ ๋ณต์ก๋ ์ธก๋ฉด์์ ํจ์จ์ ์ธ ๋ฉด์ ๋ณด์ธ๋ค๋ ๊ฒ์ด๋ค. ์ฝ๋์ ์์ ์ค์ํ์ง ์๊ณ ์ผ๋ง๋ ํจ์จ์ ์ผ๋ก ์์๋ฅผ ์ถ๊ฐ, ์ญ์ ํ๋ ๋ฐ์ ์๋ค๋ ๊ฒ์ ๊นจ๋ซ๊ฒ ๋์๋ค. ๊ณผ์ฐ ์ด๋ฐ ํ ์๋ฃ๊ตฌ์กฐ๊ฐ ์ฝ๋ฉ ํ ์คํธ ๋ฌธ์ ์์ ์ด๋ป๊ฒ ์ ์ฉ์ด ๋์๋์ง ๊ถ๊ธํ๋ค.
์ฐธ๊ณ
[์๋ฃ๊ตฌ์กฐ] ํ(heap)์ด๋ [์๋ฃ๊ตฌ์กฐ] ์ฐ์ ์์ ํ์ ํ (Priority Queue & Heap) [์๋ฃ๊ตฌ์กฐ] JS๋ก ๊ตฌํํ๋ HEAP
๐ 2022-09-12
Last updated