๐Ÿงฉ Algorithm/๊ฐœ๋… ๋ฐ ์ž๋ฃŒ๊ตฌ์กฐ

[Algorithm] ์ตœ์†Œ ํž™(Min Heap)

devCloud 2024. 11. 16. 02:52
728x90

์ตœ์†Œ ํž™

์ตœ์†Œ ํž™(Min Heap)์€ ์ด์ง„ ํŠธ๋ฆฌ ํ˜•ํƒœ์˜ ์ž๋ฃŒ๊ตฌ์กฐ๋กœ, ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ๊ฐ’์ด ํ•ญ์ƒ ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™์€ ํŠน์„ฑ์„ ๊ฐ–๋Š” ๊ตฌ์กฐ์ด๋‹ค.

  • ์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋กœ ์‚ฝ์ž…/์‚ญ์ œ ๊ฐ€๋Šฅ
  • ์ž‘์€ ๊ฐ’์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌ ๊ฐ€๋Šฅ
  • ํŠน์ • ๊ฐ’ ์‚ญ์ œ, ์ž„์˜ ์ธ๋ฑ์Šค ์ ‘๊ทผ์ด ๋น„ํšจ์œจ์ . ์ด ์†Œ์š”๋จ

ํŠน์ง•

  • ๋ถ€๋ชจ ≤ ์ž์‹
    • ๋ชจ๋“  ๋ถ€๋ชจ ๋…ธ๋“œ์˜ ๊ฐ’์€ ์ž์‹ ๋…ธ๋“œ์˜ ๊ฐ’๋ณด๋‹ค ์ž‘๊ฑฐ๋‚˜ ๊ฐ™๋‹ค.
    • ๊ฐ€์žฅ ์ž‘์€ ๊ฐ’์ด ๋ฃจํŠธ ๋…ธ๋“œ์— ์œ„์น˜.
  • ์™„์ „ ์ด์ง„ ํŠธ๋ฆฌ
    • ํŠธ๋ฆฌ์˜ ๋ชจ๋“  ๋ ˆ๋ฒจ์ด ๊ฝ‰ ์ฐจ ์žˆ์œผ๋ฉฐ, ๋งˆ์ง€๋ง‰ ๋ ˆ๋ฒจ์€ ์™ผ์ชฝ๋ถ€ํ„ฐ ์ฑ„์›Œ์ ธ์•ผ ํ•จ.

ํ™œ์šฉ

์ตœ์†Œ ํž™์€ ์ตœ์†Ÿ๊ฐ’์„ ํšจ์œจ์ ์œผ๋กœ ์ฐพ๊ฑฐ๋‚˜ ๊ด€๋ฆฌํ•ด์•ผ ํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์œ ์šฉํ•˜๋‹ค.

  • ์šฐ์„ ์ˆœ์œ„ ํ ๊ตฌํ˜„
  • ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ์—์„œ ์ตœ์†Ÿ๊ฐ’ ์ถ”์ถœ
  • ๋ฐ์ดํ„ฐ ์ŠคํŠธ๋ฆผ์—์„œ k๋ฒˆ์งธ ์ž‘์€ ๊ฐ’ ์œ ์ง€

 

์—ฐ์‚ฐ

  • ์‚ฝ์ž… O(logโกn)
    • ์ƒˆ ๋ฐ์ดํ„ฐ๋ฅผ ํŠธ๋ฆฌ์˜ ๊ฐ€์žฅ ์•„๋ž˜(์™ผ์ชฝ๋ถ€ํ„ฐ ์ฑ„์›€)์— ์‚ฝ์ž….
    • ๋ถ€๋ชจ์™€ ๋น„๊ตํ•˜์—ฌ ์˜ฌ๋ฐ”๋ฅธ ์œ„์น˜์— ๋„๋‹ฌํ•  ๋•Œ๊นŒ์ง€ ๊ฐ’์„ ๊ตํ™˜(Heapify-Up).
  • ์ตœ์†Ÿ๊ฐ’ ์‚ญ์ œ O(logโกn)
    • ๋ฃจํŠธ ๋…ธ๋“œ(์ตœ์†Ÿ๊ฐ’)๋ฅผ ์ œ๊ฑฐ.
    • ๊ฐ€์žฅ ๋งˆ์ง€๋ง‰ ๋…ธ๋“œ๋ฅผ ๋ฃจํŠธ๋กœ ์ด๋™ํ•œ ํ›„, ์ž์‹๊ณผ ๋น„๊ตํ•˜๋ฉฐ ๊ตํ™˜(Heapify-Down).
  • ์ตœ์†Ÿ๊ฐ’ ์กฐํšŒ O(1)
    • ๋ฃจํŠธ ๋…ธ๋“œ ๊ฐ’ ๋ฐ˜ํ™˜ 

 

๊ตฌํ˜„ ๋ฐฉ์‹

์ตœ์†Œ ํž™์€ ๋ฐฐ์—ด๋กœ ํšจ์œจ์ ์œผ๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค

  • ์ธ๋ฑ์Šค ๊ด€๊ณ„
    • ๋ถ€๋ชจ ์ธ๋ฑ์Šค : i
    • ์™ผ์ชฝ ์ž์‹ : 2i + 1
    • ์˜ค๋ฅธ์ชฝ ์ž์‹: 2i + 2

 

์˜ˆ์ œ

  1. ์ž…๋ ฅ ๋ฐ์ดํ„ฐ : [5, 3, 8, 1, 2]
  2. ์‚ฝ์ž… ์ˆœ์„œ๋Œ€๋กœ ์ตœ์†Œ ํž™ ์ƒ์„ฑ
    • 5 ์‚ฝ์ž… → [5]
    • 3 ์‚ฝ์ž… → [3, 5]
    • 8 ์‚ฝ์ž… → [3, 5, 8]
    • 1 ์‚ฝ์ž… → [1, 3, 8, 5] (1๊ณผ 3 ๊ตํ™˜)
    • 2 ์‚ฝ์ž… → [1, 2, 8, 5, 3] (2๊ณผ 3 ๊ตํ™˜)
  3. ์ตœ์†Ÿ๊ฐ’(1) ์ œ๊ฑฐ
    • [2, 3, 8, 5] (๋ฃจํŠธ ๋…ธ๋“œ 1 ์ œ๊ฑฐ ํ›„ 2๋ฅผ ๋ฃจํŠธ๋กœ ์ด๋™)

 

ํŒŒ์ด์ฌ์—์„œ ์ตœ์†Œ ํž™ ์‚ฌ์šฉ

ํŒŒ์ด์ฌ์˜ heapq ๋ชจ๋“ˆ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ตœ์†Œ ํž™์„ ์ œ๊ณตํ•˜๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์„ ์ง€์›ํ•œ๋‹ค.

import heapq

heap = []
heapq.heappush(heap, 5)  # ์‚ฝ์ž…
heapq.heappush(heap, 3)
heapq.heappush(heap, 8)

print(heapq.heappop(heap))  # ์ตœ์†Ÿ๊ฐ’ ์ œ๊ฑฐ → 3
print(heap[0])  # ์ตœ์†Ÿ๊ฐ’ ํ™•์ธ → 5

 


728x90