ํž™

9/3/2025

ํž™(Heap) ์ž๋ฃŒ๊ตฌ์กฐ

๊ฐœ์š”

์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋“ค์„ ๋น„๊ต ๋ถ„์„ํ•ด๋ณด๋ฉด, ๊ท ํ˜• ์ด์ง„ ๊ฒ€์ƒ‰ ํŠธ๋ฆฌ๊ฐ€ ์•ˆ์ •์ ์ด๊ณ  ์ผ๊ด€๋œ O(logโกn)O(\log n) ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค€๋‹ค๋Š” ๊ฒƒ์„ ํ™•์ธํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด์ง„ ํž™(Binary Heap) ์€ ํŠน๋ณ„ํ•œ ์žฅ์ ์„ ๊ฐ€์ง„๋‹ค:

  • ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ: O(logโกn)O(\log n) ์‹œ๊ฐ„ ๋ณต์žก๋„
  • ์ตœ์†Œ/์ตœ๋Œ€๊ฐ’ ์ ‘๊ทผ: O(1)O(1) ์‹œ๊ฐ„ ๋ณต์žก๋„

์ด๋Ÿฌํ•œ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ตœ์šฐ์„  ์ˆœ์œ„ ์›์†Œ์— ๋นˆ๋ฒˆํ•˜๊ฒŒ ์ ‘๊ทผํ•ด์•ผ ํ•˜๋Š” ์‹œ์Šคํ…œ์—์„œ ๋„๋ฆฌ ํ™œ์šฉ๋œ๋‹ค.

ํž™์˜ ์ •์˜์™€ ์†์„ฑ

ํž™์€ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ(Complete Binary Tree) ๊ตฌ์กฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, ๋‹ค์Œ ๋‘ ๊ฐ€์ง€ ํ•ต์‹ฌ ์†์„ฑ์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค:

1. ํž™ ์ˆœ์„œ ์†์„ฑ (Heap Order Property)

๋ชจ๋“  ๋…ธ๋“œ๋Š” ์ž์‹ ๋…ธ๋“œ๋“ค๊ณผ ํŠน์ •ํ•œ ์ˆœ์„œ ๊ด€๊ณ„๋ฅผ ์œ ์ง€ํ•ด์•ผ ํ•œ๋‹ค:

  • ์ตœ์†Œ ํž™(Min Heap): ๊ฐ ๋…ธ๋“œ์˜ ๊ฐ’ โ‰ค ์ž์‹ ๋…ธ๋“œ๋“ค์˜ ๊ฐ’
  • ์ตœ๋Œ€ ํž™(Max Heap): ๊ฐ ๋…ธ๋“œ์˜ ๊ฐ’ โ‰ฅ ์ž์‹ ๋…ธ๋“œ๋“ค์˜ ๊ฐ’

2. ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ ๊ตฌ์กฐ ์†์„ฑ

ํŠธ๋ฆฌ์˜ ๋†’์ด๋ฅผ hh๋ผ ํ•  ๋•Œ, ๋ชจ๋“  ๋ฆฌํ”„ ๋…ธ๋“œ๋“ค์ด ๋ ˆ๋ฒจ hh ๋˜๋Š” hโˆ’1h-1์— ์œ„์น˜ํ•ด์•ผ ํ•œ๋‹ค. ์ด๋Š” ํŠธ๋ฆฌ๊ฐ€ ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ ํ˜•ํƒœ๋ฅผ ์œ ์ง€ํ•จ์„ ์˜๋ฏธํ•œ๋‹ค.

๋ฐฐ์—ด ๊ธฐ๋ฐ˜ ๊ตฌํ˜„

ํž™์˜ ๊ฐ€์žฅ ํฐ ์žฅ์  ์ค‘ ํ•˜๋‚˜๋Š” ํฌ์ธํ„ฐ ์—†์ด ๋ฐฐ์—ด๋งŒ์œผ๋กœ ํšจ์œจ์ ์ธ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ์˜ ํŠน์„ฑ์„ ํ™œ์šฉํ•˜์—ฌ ๊ฐ ๋ ˆ๋ฒจ์„ ์ˆœ์ฐจ์ ์œผ๋กœ ๋ฐฐ์—ด์— ์ €์žฅํ•œ๋‹ค.

์˜ˆ์‹œ ๊ตฌ์กฐ

      17
  13        6
1    4   2    5

๋ฐฐ์—ด ํ‘œํ˜„: [17, 13, 6, 1, 4, 2, 5]

์ธ๋ฑ์Šค ๊ด€๊ณ„์‹

๋…ธ๋“œ ์ธ๋ฑ์Šค๋ฅผ ii๋ผ ํ•  ๋•Œ:

  • ๋ถ€๋ชจ ๋…ธ๋“œ: โŒŠiโˆ’12โŒ‹\lfloor\frac{i-1}{2}\rfloor
  • ์™ผ์ชฝ ์ž์‹: 2i+12i + 1
  • ์˜ค๋ฅธ์ชฝ ์ž์‹: 2i+22i + 2

๊ฒ€์ฆ ์˜ˆ์‹œ

์ธ๋ฑ์Šค 2(๊ฐ’ 6)์ธ ๋…ธ๋“œ์˜ ๊ด€๊ณ„:

  • ๋ถ€๋ชจ: โŒŠ2โˆ’12โŒ‹=0\lfloor\frac{2-1}{2}\rfloor = 0 โ†’ ๋…ธ๋“œ 17 โœ“
  • ์ž์‹๋“ค: 2ร—2+1=52 \times 2 + 1 = 5, 2ร—2+2=62 \times 2 + 2 = 6 โ†’ ๋…ธ๋“œ 2, 5 โœ“

์ฃผ์š” ์—ฐ์‚ฐ ๊ตฌํ˜„

์‚ญ์ œ ์—ฐ์‚ฐ (Extract-Min/Max)

Percolate Down(ํ˜๋Ÿฌ๋‚ด๋ฆฌ๊ธฐ) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค:

  1. ๋ฃจํŠธ ๋…ธ๋“œ(์ตœ์šฐ์„ ์ˆœ์œ„ ์›์†Œ) ์ œ๊ฑฐ
  2. ๋งˆ์ง€๋ง‰ ๋ฆฌํ”„ ๋…ธ๋“œ๋ฅผ ๋ฃจํŠธ ์œ„์น˜๋กœ ์ด๋™
  3. ํž™ ์†์„ฑ ๋ณต์›์„ ์œ„ํ•ด percolate down ์ˆ˜ํ–‰:
    • ํ˜„์žฌ ๋…ธ๋“œ์™€ ์ž์‹ ๋…ธ๋“œ๋“ค ๋น„๊ต
    • ํž™ ์กฐ๊ฑด์— ์œ„๋ฐฐ๋˜๋ฉด ์ ์ ˆํ•œ ์ž์‹๊ณผ ๊ตํ™˜
    • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๊ฑฐ๋‚˜ ๋ฆฌํ”„์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

์‹œ๊ฐ„ ๋ณต์žก๋„: O(logโกn)O(\log n)

์‚ฝ์ž… ์—ฐ์‚ฐ (Insert)

๋ฐ˜๋Œ€๋กœ Percolate Up ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•œ๋‹ค:

  1. ์ƒˆ ์›์†Œ๋ฅผ ๋งˆ์ง€๋ง‰ ์œ„์น˜(์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ ์œ ์ง€)์— ์‚ฝ์ž…
  2. ํž™ ์†์„ฑ ๋ณต์›์„ ์œ„ํ•ด percolate up ์ˆ˜ํ–‰:
    • ํ˜„์žฌ ๋…ธ๋“œ์™€ ๋ถ€๋ชจ ๋…ธ๋“œ ๋น„๊ต
    • ํž™ ์กฐ๊ฑด์— ์œ„๋ฐฐ๋˜๋ฉด ๋ถ€๋ชจ์™€ ๊ตํ™˜
    • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๊ฑฐ๋‚˜ ๋ฃจํŠธ์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณต

์‹œ๊ฐ„ ๋ณต์žก๋„: O(logโกn)O(\log n)

์„ฑ๋Šฅ ๋ถ„์„

| ์—ฐ์‚ฐ | ์‹œ๊ฐ„ ๋ณต์žก๋„ | ์„ค๋ช… |
| --------- | ----------- | ------------ |
| ์ตœ์†Œ/์ตœ๋Œ€๊ฐ’ ์กฐํšŒ | O(1)O(1) | ๋ฃจํŠธ ๋…ธ๋“œ ์ง์ ‘ ์ ‘๊ทผ |
| ์‚ฝ์ž… | O(logโกn)O(\log n) | ์ƒํ–ฅ ์นจํˆฌ ๊ณผ์ • |
| ์‚ญ์ œ | O(logโกn)O(\log n) | ํ•˜ํ–ฅ ์นจํˆฌ ๊ณผ์ • |
| ํž™ ์ƒ์„ฑ | O(n)O(n) | Bottom-up ํž™ํ™” |

์ด๋Ÿฌํ•œ ํŠน์„ฑ์œผ๋กœ ์ธํ•ด ํž™์€ ์šฐ์„ ์ˆœ์œ„ ํ, ํž™ ์ •๋ ฌ, ๊ทธ๋ž˜ํ”„ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ํ•ต์‹ฌ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ ํ™œ์šฉ๋˜๊ณ  ์žˆ๋‹ค.