μκ³ λ¦¬μ¦
μ°μ μμ ν (Priority Queue)
adorableco
2023. 2. 15. 16:18
λ°μν
μ°μ μμ νλ?
- μ°μ μμκ° κ°μ₯ λμ λ°μ΄ν°λ₯Ό κ°μ₯ λ¨Όμ μμ νλ μλ£κ΅¬μ‘°
- μ°μ μμ νλ λ°μ΄ν°λ₯Ό μ°μ μμμ λ°λΌ μ²λ¦¬νκ³ μΆμ λ μ¬μ©ν¨.
ꡬν νλ λ°©λ²
1) λ¨μν 리μ€νΈλ₯Ό μ΄μ©νμ¬ κ΅¬ν
2) ν(heap)μ μ΄μ©νμ¬ κ΅¬ν
μ°μ μμ ν ꡬν λ°©μ | μ½μ μκ° | μμ μκ° |
리μ€νΈ | O(1) | O(N) |
ν(Heap) | O(logN) | O(logN) |
- λ¨μν Nκ°μ λ°μ΄ν°λ₯Ό νμ λ£μλ€κ° λͺ¨λ κΊΌλ΄λ μμ
μ μ λ ¬κ³Ό λμΌνλ€.
- μ΄ κ²½μ° μκ° λ³΅μ‘λλ O(NlogN)
ν(Heap)μ νΉμ§
- νμ μμ μ΄μ§ νΈλ¦¬ μλ£κ΅¬μ‘°μ μΌμ’ μ΄λ€.
- νμμλ νμ λ£¨νΈ λ Έλ(root node)λ₯Ό μ κ±°νλ€.
- μ΅μ ν(min heap)
- λ£¨νΈ λ Έλκ° κ°μ₯ μμ κ°μ κ°μ§λ€
- λ°λΌμ κ°μ΄ μμ λ°μ΄ν°κ° μ°μ μ μΌλ‘ μ κ±°λλ€.
- μ΅λ ν(max heap)
- λ£¨νΈ λ Έλκ° κ°μ₯ ν° κ°μ κ°μ§λ€.
- λ°λΌμ κ°μ΄ ν° λ°μ΄ν°κ° μ°μ μ μΌλ‘ μ κ±°λλ€.
μμ μ΄μ§ νΈλ¦¬ (Complete Binary Tree)
- μμ μ΄μ§ νΈλ¦¬λ λ£¨νΈ λ ΈλλΆν° μμνμ¬ μΌμͺ½ μμ λ Έλ, μ€λ₯Έμͺ½ μμ λ Έλ μμλλ‘ λ°μ΄ν°κ° μ°¨λ‘λλ‘ μ½μ λλ νΈλ¦¬λ₯Ό μλ―Έν¨.
μ΅μ ν κ΅¬μ± ν¨μ : Min-Heapify()
- (μν₯μ) λΆλͺ¨ λ Έλλ‘ κ±°μ¬λ¬ μ¬λΌκ°λ©°, λΆλͺ¨λ³΄λ€ μμ μ κ°μ΄ λ μμ κ²½μ°μ μμΉλ₯Ό κ΅μ²΄ν©λλ€.
μ°μ μμ ν λΌμ΄λΈλ¬λ¦¬λ₯Ό νμ©ν ν μ λ ¬ ꡬν μμ
import sys
import heapq
input = sys.stdin.readline
def heapsort(iterable):
h = []
result = []
# λͺ¨λ μμλ₯Ό μ°¨λ‘λλ‘ νμ μ½μ
for value in iterable:
heapq.heappush(h, value)
# νμ μ½μ
λ λͺ¨λ μμλ₯Ό μ°¨λ‘λλ‘ κΊΌλ΄μ΄ λ΄κΈ°
for i in range(len(h)):
result.append(heapq.heappop(h))
return result
n = int(input())
arr = []
for i in range(n):
arr.append(int(input()))
res = heapsort(arr)
for i in range(n):
print(res[i])
λ°μν