Binary Heap

ํž™(heap)์€ ์ด์ง„ ํž™(binary heap)์ด๋ผ๊ณ ๋„ ํ•˜๋ฉฐ, ์ตœ๋Œ“๊ฐ’ ๋ฐ ์ตœ์†Ÿ๊ฐ’์„ ์ฐพ์•„๋‚ด๋Š” ์—ฐ์‚ฐ์„ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๊ณ ์•ˆ๋œ ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ๋ฅผ ๊ธฐ๋ณธ์œผ๋กœ ํ•œ ์ž๋ฃŒ๊ตฌ์กฐ์ž…๋‹ˆ๋‹ค.

์™„์ „ ์ด์ง„ํŠธ๋ฆฌ(Complete Binary Tree) ์ด๋‹ค.
๋ถ€๋ชจ๋…ธ๋“œ์˜ ํ‚ค๊ฐ’๊ณผ ์ž์‹๋…ธ๋“œ์˜ ํ‚ค๊ฐ’ ์‚ฌ์ด์—๋Š” ๋Œ€์†Œ๊ด€๊ณ„๊ฐ€ ์„ฑ๋ฆฝํ•œ๋‹ค.
ํ‚ค๊ฐ’ ๋Œ€์†Œ๊ด€๊ณ„๋Š” ์˜ค๋กœ์ง€ ๋ถ€๋ชจ์ž์‹ ๊ฐ„์—๋งŒ ์„ฑ๋ฆฝ๋˜๋ฉฐ ํ˜•์ œ์‚ฌ์ด์—๋Š” ๋Œ€์†Œ๊ด€๊ณ„๊ฐ€ ์ •ํ•ด์ง€์ง€ ์•Š์•˜

Root node๋Š” ๊ฐ€์žฅ ๋(์ตœ๋Œ€|์ตœ์†Œ)๊ฐ’์ด๋‹ค. ํ•ญ์ƒ์ž์‹๋…ธ๋“œ๋Š” ๋ถ€๋ชจ๋…ธ๋“œ๋ณด๋‹ค ๊ธฐ์ค€์„๋”ฐ๋ฅธ๋‹ค (์ž‘๊ฑฐ๋‚˜, ํฌ๋‹ค)

ํŠน์ง•

ํž™์€ ์™„์ „ ์ด์ง„ํŠธ๋ฆฌ์ž…๋‹ˆ๋‹ค. ํž™์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฐฐ์—ด๋กœ ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. ๋ฃจํŠธ ๋…ธ๋“œ์˜ ์ธ๋ฑ์Šค i๊ฐ€ 1์ธ ๊ฒฝ์šฐ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์†์„ฑ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

๋…ธ๋“œ i์˜ ๋ถ€๋ชจ๋…ธ๋“œ ์ธ๋ฑ์Šค : โŒŠ๏ฟฝ/2โŒ‹
๋…ธ๋“œ i์˜ ์™ผ์ชฝ ์ž์‹ ๋…ธ๋“œ ์ธ๋ฑ์Šค : 2*i
๋…ธ๋“œ i์˜ ์˜ค๋ฅธ์ชฝ ์ž์‹ ๋…ธ๋“œ ์ธ๋ฑ์Šค : 2*i + 1
โ€ป์™ผ์ชฝ๋ถ€ํ„ฐ ํ•œ์ค„์”ฉ ์„ผ๋‹ค

Heapify

heapify๋Š” ์ด์ง„ํŠธ๋ฆฌ์—์„œ ํž™ ์†์„ฑ์„ ์œ ์ง€ํ•˜๋Š” ์ž‘์—…์„ ํ•ฉ๋‹ˆ๋‹ค. ์œ„์—์„œ ์•„๋ž˜๋กœ ๋‚ด๋ ค๊ฐ€๋ฉด์„œ ์ž‘์—…์„ ํ•ฉ๋‹ˆ๋‹ค.

์š”์†Œ ๊ฐ’๊ณผ ์ž์‹ ๋…ธ๋“œ ๊ฐ’์„ ๋น„๊ตํ•ฉ๋‹ˆ๋‹ค.
๋งŒ์•ฝ ์ž์‹ ๋…ธ๋“œ ๊ฐ’์ด ํฌ๋‹ค๋ฉด ์™ผ์ชฝ ์˜ค๋ฅธ์ชฝ ์ž์‹ ์ค‘ ๊ฐ€์žฅ ํฐ ๊ฐ’์œผ๋กœ ๊ตํ™˜ํ•ฉ๋‹ˆ๋‹ค.
ํž™ ์†์„ฑ์ด ์œ ์ง€ ๋  ๋•Œ๊นŒ์ง€ 1,2๋ฒˆ ๊ณผ์ •์„ ๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

e.g ) ์šฐ์„ ์ˆœ์œ„ ํ, Dijkstra ์•Œ๊ณ ๋ฆฌ์ฆ˜, ํž™ ์ •๋ ฌ

Last updated