🚧

νž™ (Binary Heap)

purpplee 2021. 11. 23. 10:07

νž™(binary heap)μ΄λž€?

μ΅œλŒ€κ°’μ΄λ‚˜ μ΅œμ†Œκ°’μ„ λΉ λ₯΄κ²Œ μ°Ύμ•„λ‚΄κΈ° μœ„ν•΄ κ³ μ•ˆλœ μ™„μ „ 이진 트리(λ§ˆμ§€λ§‰ λ ˆλ²¨μ„ μ œμ™Έν•˜κ³  λͺ¨λ‘ μ±„μ›Œμ Έ 있으며, λ§ˆμ§€λ§‰ λ ˆλ²¨μ€ μ™Όμͺ½λΆ€ν„° μ±„μ›Œμ Έ μžˆλŠ” 트리)λ‹€. μž‘μ€ 값을 λΆ€λͺ¨μ— λ†“λŠ” μ΅œμ†Œνž™κ³Ό 큰 값을 λΆ€λͺ¨μ— λ†“λŠ” μ΅œλŒ€νž™μ΄ μžˆλ‹€. λ‘˜μ€ 원리가 κ°™κΈ° λ•Œλ¬Έμ— ν•˜λ‚˜λ§Œ μ•Œμ•„λ‘¬λ„ λ‹€λ₯Έ 건 λ˜‘κ°™μ΄ μ‚¬μš©ν•  수 μžˆλ‹€.

 

μ΅œμ†Œνž™ μ—°μ‚°

μ΅œμ†Œνž™μ€ λ…Έλ“œλ₯Ό μΆ”κ°€ν•˜κ±°λ‚˜ μ‚­μ œν•  λ•Œλ§ˆλ‹€ λΆ€λͺ¨ λ…Έλ“œκ°€ μžμ‹λ…Έλ“œλ³΄λ‹€ μž‘μ€ 값을 κ°€μ§€κ³  μžˆμ–΄μ•Ό ν•˜κ³ , μ™„μ „μ΄μ§„νŠΈλ¦¬μ˜ ν˜•νƒœλ₯Ό μœ μ§€ν•˜λŠ” μž‘μ—…(Heapify)이 ν•„μš”ν•˜λ‹€.

 

λ…Έλ“œ μ‚½μž…ν•˜κΈ°

μ™„μ „ 이진 트리의 ν˜•νƒœλ₯Ό μœ μ§€ν•˜κΈ° μœ„ν•΄ 맨 λ§ˆμ§€λ§‰ 레벨의 μ™Όμͺ½λΆ€ν„° μ±„μ›Œλ‚˜κ°€λ©°, μΆ”κ°€λœ λ…Έλ“œλŠ” μ •λ ¬λ˜μ–΄μžˆμ§€ μ•ŠμœΌλ―€λ‘œ λΆ€λͺ¨ λ…Έλ“œμ™€ 비ꡐ해 자리λ₯Ό λ°”κΏ”κ°€λ©° μ •λ ¬μ‹œμΌœμ€˜μ•Ό ν•œλ‹€. μ •λ ¬λ˜μ–΄ μžˆλŠ” 이진 νŠΈλ¦¬μ΄λ―€λ‘œ ν•œ 단계λ₯Ό κ±°μΉ  λ•Œλ§ˆλ‹€ μž‘μ—…μ΄ 반으둜 쀄어듀어 O(log n) 의 μ‹œκ°„λ³΅μž‘λ„λ₯Ό κ°€μ§„λ‹€.

 

λ…Έλ“œ κΊΌλ‚΄μ˜€κΈ°

μ΅œμ†Œνž™μ€ μ΅œμ†Œκ°’μ„ λΉ λ₯΄κ²Œ μ°Ύμ•„λ‚΄κΈ° μœ„ν•΄ κ³ μ•ˆλ˜μ—ˆμœΌλ‹ˆ, λ…Έλ“œλ₯Ό κΊΌλ‚΄μ˜¨λ‹€λŠ” 건 μ΅œμ†Œκ°’μ„ κ°€μ§€λŠ” 루트 λ…Έλ“œλ₯Ό μš”μ²­ν•˜λŠ” 것이닀. 즉, 루트λ₯Ό κΊΌλ‚΄μ˜€λŠ” 연산이닀. μ΅œμ†Œνž™μ˜ 루트λ₯Ό κΊΌλ‚΄λ©΄ 빈 곡간이 μƒκΈ°λ―€λ‘œ 루트 μžλ¦¬μ— 맨 λ§ˆμ§€λ§‰ λ…Έλ“œ(맨 μ•„λž˜ 였λ₯Έμͺ½)λ₯Ό μ˜¬λ¦°λ‹€. κ·Έ ν›„ μžμ‹ λ…Έλ“œμ™€ λΉ„κ΅ν•΄μ„œ μžμ‹ λ³΄λ‹€ μž‘μ€ 값을 κ°€μ§„ λ…Έλ“œμ™€ λ°”κΏ”κ°€λ©° μ •λ ¬μ‹œμΌœμ€€λ‹€. μ •λ ¬λ˜μ–΄ μžˆλŠ” 이진 νŠΈλ¦¬μ΄λ―€λ‘œ ν•œ 단계λ₯Ό κ±°μΉ  λ•Œλ§ˆλ‹€ μž‘μ—…μ΄ 반으둜 쀄어듀어 O(log n) μ˜ μ‹œκ°„λ³΅μž‘λ„λ₯Ό κ°€μ§„λ‹€.

λ°˜μ‘ν˜•