[파이썬/python] νž™ (heap)

2021. 9. 6. 21:07

νž™μ€ μ΅œλŒ€κ°’ 및 μ΅œμ†Œκ°’μ„ μ°Ύμ•„λ‚΄λŠ” 연산을 λΉ λ₯΄κ²Œ ν•˜κΈ° μœ„ν•΄ κ³ μ•ˆλœ μ™„μ „μ΄μ§„νŠΈλ¦¬ 기반의 μžλ£Œκ΅¬μ‘°μ΄λ‹€.

 

νž™μ€ λΆ€λͺ¨λ…Έλ“œμ™€ μžμ‹λ…Έλ“œμ˜ κ΄€κ³„λ‘œ μ΅œλŒ€ νž™, μ΅œμ†Œ νž™μœΌλ‘œ λ‚˜λ‰œλ‹€.

ν‚€ κ°’μ˜ λŒ€μ†Œκ΄€κ³„λŠ” λΆ€λͺ¨λ…Έλ“œμ™€ μžμ‹λ…Έλ“œ κ°„μ—λ§Œ μ„±λ¦½ν•˜λ©° ν˜•μ œ μ‚¬μ΄μ—λŠ” μ„±λ¦½ν•˜μ§€ μ•Šμ„ 수 μžˆλ‹€.

  • μ΅œλŒ€ νž™ : λΆ€λͺ¨λ…Έλ“œ ν‚€ κ°’ >= μžμ‹λ…Έλ“œ ν‚€ κ°’. λΏŒλ¦¬λ…Έλ“œκ°€ 항상 제일 큼
  • μ΅œμ†Œ νž™ : λΆ€λͺ¨λ…Έλ“œ ν‚€ κ°’ <= μžμ‹λ…Έλ“œ ν‚€ κ°’. λΏŒλ¦¬λ…Έλ“œκ°€ 항상 제일 μž‘μŒ

 

배열에 μžˆλŠ” λ°μ΄ν„°μ˜ μ΅œλŒ€κ°’ λ˜λŠ” μ΅œμ†Œκ°’μ„ 찾으렀면 O(n)이 κ±Έλ¦¬μ§€λ§Œ

νž™μ— μžˆλŠ” λ°μ΄ν„°μ˜ μ΅œλŒ€κ°’ λ˜λŠ” μ΅œμ†Œκ°’μ„ 찾으렀면 O(logn)이 κ±Έλ¦¬λ―€λ‘œ 더 νš¨μœ¨μ μ΄λ‹€. 

 

νž™μœΌλ‘œ κ΅¬ν˜„λœ μ΄μ§„νŠΈλ¦¬κ΅¬μ‘°λŠ” λ°°μ—΄λ‘œ μ €μž₯λœλ‹€.

 

μ˜ˆμ‹œλ‘œ μ΄ν•΄ν•˜κΈ°

μ•„λž˜μ˜ μ˜ˆμ‹œλŠ” μ΅œλŒ€ νž™μœΌλ‘œ μ •λ ¬λœ 트리 ꡬ쑰가 μžˆμ„ λ•Œ 20을 μΆ”κ°€ν•˜λŠ” 과정이닀.

μ™„μ„±λœ μ΄μ§„νŠΈλ¦¬λ₯Ό λ°°μ—΄λ‘œ λ‚˜νƒ€λ‚΄λ©΄ μ•„λž˜μ™€ κ°™λ‹€.

[20, 13, 15, 3, 8, 10]

 

파이썬으둜 κ΅¬ν˜„ν•˜κΈ°

μ΅œμ†Œνž™ κ΅¬ν˜„

νŒŒμ΄μ¬μ—μ„œλŠ” λ‚΄μž₯ λͺ¨λ“ˆ heapqλ₯Ό μ΄μš©ν•˜μ—¬ κ°„λ‹¨νžˆ κ΅¬ν˜„ν•  수 μžˆλ‹€.

 

heapq λͺ¨λ“ˆμ„ import ν•œ ν›„ μ €μž₯ν•  λ°°μ—΄ heap을 λ§Œλ“ λ‹€.

  • heappush : λ°°μ—΄ heap에 μ›μ†Œ μΆ”κ°€
  • heappop : λ°°μ—΄ heap의 κ°€μž₯ μž‘μ€ μ›μ†Œ μ‚­μ œ
  • heapify : κΈ°μ‘΄ 리슀트λ₯Ό νž™μœΌλ‘œ λ³€ν™˜
import heapq
heap = []

# heappush
heapq.heappush(heap, 5)

# heappop
heapq.heappop(heap)

# heapify
list = [3, 6, 8, 2]
heapq.heapify(list)

 

728x90

BELATED ARTICLES

more