Heap
μ μ
μ°μ μμ νλ₯Ό μν μλ£κ΅¬μ‘°.μ°μ μμ νλ μ€μΌμ€λ§(ex: CPU μ€μΌμ€λ§)μ μ£Όλ‘ μ°μΈλ€.
κ°μ₯ ν° λ°μ΄ν°λΆν° λμ€λ©΄ Max Heap(μ΅λ ν), κ°μ₯ μμ λ°μ΄ν°λΆν° λμ€λ©΄ Min Heap(μ΅μ ν)μ΄λΌκ³ νλ€.
ꡬν(Python) - Max Heap
λ€μμ λ³μλ€μ΄ μ‘΄μ¬νλ€κ³ κ°μ νλ€.
HEAP_SIZE = 0 # νμ μ‘΄μ¬νλ μμμ κ°μλ₯Ό μ μ₯ν λ³μ
heap = [None] # ν (0λ² μΈλ±μ€ λ―Έμ¬μ©)μ½μ
# νμ μ½μ
μ. λ°λ³΅ μΈλ±μ€ iλ λ°©κΈ λ€μ΄κ° λ°μ΄ν°μ μΈλ±μ€λΆν° 루νΈμ μμκΉμ§
# 1. λ§μ§λ§ λ
Έλμ μ λ°μ΄ν°λ₯Ό μ½μ
# 2. (μ΅λ ν κΈ°μ€) λΆλͺ¨μ λΉκ΅ν΄μ λΆλͺ¨λ³΄λ€ ν¬λ©΄ λΆλͺ¨μ swap
# 3. λΆλͺ¨κ° λ ν° κ°μΌ λκΉμ§ 2λ²μ λ°λ³΅
def push(data):
global HEAP_SIZE
HEAP_SIZE += 1
heap.append(data)
i = HEAP_SIZE
while i > 1:
parent = i//2
if heap[i] <= heap[parent]:
break
heap[i], heap[parent] = heap[parent], heap[i]
i = parentμμ
μκ°λ³΅μ‘λ
μ½μ μ 맨 λ°μμ 맨 μκΉμ§ μ¬λΌμ€λ κ³Όμ μ΄λ―λ‘ O(logN)μ΄λ€.
μμ λ μμ μ체λ O(1)μ΄μ§λ§ μ¬μ λ ¬ κ³Όμ μ΄ νμνλ€. μ¬μ λ ¬μ 루νΈκ° μ΅λ λ§μ§λ§ λ ΈλκΉμ§ κ²μ¬νλ κ³Όμ μ΄λ―λ‘ λ§¨ μμμ 맨 λ°κΉμ§ μ¬λΌμ€λ κ³Όμ μ΄λ€. λ°λΌμ, O(logN)μ΄λ€.
Last updated