πμλ£κ΅¬μ‘°/μκ³ λ¦¬μ¦ - 8
νμ΅κΈ°λ‘
μ€λ λ€μ κ°μ λͺ©λ‘
- ν - 2
- ν - 3
μ€λ ν¬μ€νΈμ μ£Όλ λ΄μ©μ ν ꡬνμΌ κ±°μμ€
λ°°μ΄μ ν΅ν ν ꡬν
μΌλ°μ μΌλ‘ λ°°μ΄μ μ¬μ©ν΄μ λ§μ΄ ꡬννλ€.
0λ² μΈλ±μ€λ λ²λ¦¬κ³ , 1λ² μΈλ±μ€λΆν° ꡬννλ©΄ νΈν¨
μ κ·Έλ¦Όμμ μ²λΌ μ΅μμ λ
Έλλ₯Ό 1,
μΌμͺ½λΆν° μ€λ₯Έμͺ½μΌλ‘ +1μ© μΈλ±μ€λ₯Ό μ‘μΌλ©΄,
1μ μμ 2, 3
2μ μμ 4, 5
3μ μμ 6, 7
4μ μμ 8, 9
nμ μμ 2n, 2n+1λ‘ μ 리 ν μ μλ€.
μ΄λ€ λ
Έλμ λ°°μ΄μμ μΈλ±μ€λ₯Ό nμ΄λΌ ν λ,
λΆλͺ¨λ
Έλμ μΈλ±μ€λ $mod(n, 2)$μ΄κ³ ,
μΌμͺ½ μμλ
Έλμ μΈλ±μ€λ 2n,
μ€λ₯Έμͺ½ μμλ
Έλμ μΈλ±μ€λ 2n + 1μ΄ λλ€.
class MaxHeap():
def __init__(self, data):
self.heap = [None, data]
def push(self, data):
cur_idx = len(self.heap)
next = cur_idx // 2
self.heap.append(data)
while self.heap[next] and self.heap[next] < self.heap[cur_idx]:
self.heap[cur_idx], self.heap[next] = self.heap[next], self.heap[cur_idx]
cur_idx = next
next = next // 2
def pop(self):
if len(self.heap) > 1:
data = self.heap[1]
self.heap[1] = self.heap[-1]
del self.heap[-1]
if len(self.heap) > 1:
cur = 1
if cur * 2 + 1 < len(self.heap): # μμͺ½ λ€ μμλ
Έλ μ‘΄μ¬
next = cur * 2 if self.heap[cur * 2] > self.heap[cur * 2 + 1] else cur * 2 + 1
elif cur * 2 < len(self.heap): # μΌμͺ½λ§ μμλ
Έλ μ‘΄μ¬
next = cur * 2
else: # μμλ
Έλ μμ, λ°λ³΅λ¬Έ μ€νμν¨
next = cur
while next < len(self.heap) and self.heap[cur] < self.heap[next]:
print("swap", self.heap[cur], self.heap[next])
self.heap[cur], self.heap[next] = self.heap[next], self.heap[cur]
cur = next
if cur * 2 + 1 < len(self.heap): # μμͺ½ λ€ μμλ
Έλ μ‘΄μ¬
next = cur * 2 if self.heap[cur * 2] > self.heap[cur * 2 + 1] else cur * 2 + 1
elif cur * 2 < len(self.heap): # μΌμͺ½λ§ μμλ
Έλ μ‘΄μ¬
next = cur * 2
else: # μμλ
Έλ μμ, λ°λ³΅λ¬Έ μ€νμν¨
next = cur
return data
mh = MaxHeap(100)
mh.push(1000)
mh.push(500)
mh.push(300)
mh.push(700)
data = mh.pop()
while data:
print(data)
print(mh.heap)
print()
data = mh.pop()
μ€νκ²°κ³Όλ μμ κ°λ€.
λ¨μνκ² νμμ μΆκ°(push)μ μμ (pop)λ§ κ΅¬ννλ€.
λ°μ΄ν° μ½μ ꡬν
μ λ²μκ°μλ μ μμ§λ§,
맨 λ§μ§λ§μ λ°μ΄ν°λ₯Ό λ£κ³ μμν΄μ,
λΆλͺ¨λ
Έλλ³΄λ€ νμ¬λ
Έλκ° λ ν¬λ€λ©΄ μλ‘ μ€μνλ κ³Όμ μ λ°λ³΅νλ€.
λ°μ΄ν° μμ ꡬν
μ²μμλ μ무μκ°μμ΄ λ§μ§λ§ μμμ μμ νλ μ½λλ₯Ό μμ±νλ€.
λ¨Όμ μ΅μμ λ Έλμ λ§μ§λ§ λ Έλλ₯Ό λ£κ³ , λ§μ§λ§ λ Έλλ₯Ό μμ νλ€. λ Έλκ° λ¨μμλ€λ©΄, νμ¬ λ Έλμ μμ λ Έλλ₯Ό λΉκ΅νμ¬ νμ λ Έλκ° λ ν¬λ€λ©΄ μλ‘ μ€μνλ κ³Όμ μ λ°λ³΅νλ€.
λ§μ§λ§
μ΄μ©λ€ 보λ λ§μ§λ§ μλ£κ΅¬μ‘° κ°μκΉμ§ λ€μλ€.
λ€μμ νΈλ¦¬λ₯Ό λ€μ μ λλ‘ κ΅¬νν΄λ΄μΌκ² μ§λ§, νμΌμλ μκ°μ΄ μλμ μ£Όλ§μ ν΄λ΄μΌκ² λ€.
μ΄λ° μλλ©΄ 50μΌ μμ μ΄ κ°μ’ μ 체λ₯Ό λͺ μ¬μ΄ν΄μ΄λ λ릴 μ μμκΉ?
λ°©κΈ λμΆ© μμν΄λ³΄λ €λ€κ° μ§λ¦΄λ»νλ€..γ
γ
μ§κΈ μ΄λλ‘λ§ νμγ
γ
μ΄κ±΄ κ·Έλ₯ κΈ°λΆμ’μμ μ°μ μΈμ¦μ·?
μ€κ°μ MACμ μ£ΌνΌν°μ€μΉ κ°μκ° λΌμ΄μμ΄μ 건λλ°μ΄μ 체ν¬κ° μλμλλ° μ½κ° λΆ-νΈνλ€.
λ€μ κ°μλΆν°λ μκ³ λ¦¬μ¦ μ΄λ‘ !
κ°μ₯ μ¬λ―ΈμμΌλ©΄μ :) , κ°μ₯ νλ μλ μλ λΆλΆ :(
(μ€λμ κΈμλ³΄λ€ μ½λκ° λ λ§λ€?)
λκΈλ¨κΈ°κΈ°