2024. 1. 5. 22:00γCS - Roadmap.sh/1. Data structures
Data structures (with python) - 3. Heap
π‘ Heap is a tree-based data structure that follows the properties of a complete binary tree and is either a Min Heap or a Max Heap.
νμ μμ ν μ΄μ§ νΈλ¦¬μ μμ±μ λ°λ₯΄λ νΈλ¦¬ κΈ°λ° λ°μ΄ν° ꡬ쑰λ‘, μ΅μ ν λλ μ΅λ ν μ€ νλμ λλ€.
ν(Heap)μ μ΄μ§νΈλ¦¬μ μΌμ’ μΌλ‘, νΉμ ν κ·μΉμ κ°μ§κ³ μλ μλ£ κ΅¬μ‘°μ΄λ€.
(Tree λ μ΄μ§νΈλ¦¬, λ°Έλ°μ€ νΈλ¦¬, μΈλ°Έλ°μ€ νΈλ¦¬ λ±λ±μ μ°¨ν λ€λ£¬λ€.)
νμ λκ°μ§ μ’ λ₯κ° μμ΅λλ€.
μ΅λ ν(Max heap) , μ΅μ ν(Min Heap)
μ΅λ ν : λΆλͺ¨ λ Έλμ ν€ κ°μ΄ μμ λ Έλμ ν€ κ°λ³΄λ€ νμ ν¬κ±°λ κ°λ€.
= μ¦, λ£¨νΈ λ Έλκ° κ°μ₯ ν° κ°μ κ°μ§λ€.
μ΅μ ν: λΆλͺ¨ λ Έλμ ν€ κ°μ΄ μμ λ Έλμ ν€ κ°λ³΄λ€ νμ μκ±°λ κ°ν.
= μ¦, λ£¨νΈ λ Έλκ° κ°μ₯ μμ κ°μ κ°μ§λ€.
νμ μ°μ μμ ν(Queue)λ₯Ό ꡬννλλ° μ£Όλ‘ μ¬μ©λλ©°, μ΄μΈμλ ν μ λ ¬, κ·Έλν μκ³ λ¦¬μ¦ λ± λ€μν κ³³μ νμ©λλ€.
(ν(Queue) λ FIFO(First In, First Out) ꡬ쑰λ₯Ό κ°μ§ μλ£κ΅¬μ‘°μ΄λ€. μ€μ μλ κ²κ³Ό μ μ¬νλ©° μ°¨ν λ€λ£¬λ€.)
νμ΄μ¬μμ ν(Heap)μ ꡬνν΄λ³΄λ €λ©΄ heapq λͺ¨λλ‘ μ½κ² ꡬνν μ μλ€.
import heapq
heap = []
heapq λͺ¨λΈμ κΈ°λ³Έμ μΌλ‘ μ΅μ νμ μ 곡νλ€.
μ΄μ νμ μμλ₯Ό μ‘°μν΄λ³΄μ.
# νμ μμ μΆκ°
heapq.heappush(heap, 4)
heapq.heappush(heap, 1)
heapq.heappush(heap, 7)
print(heap) # μΆλ ₯: [1, 4, 7]
# νμ μμ μμ
print(heapq.heappop(heap)) # κ°μ₯ μμ μμ μμ ν μΆλ ₯: 1
print(heap) # μΆλ ₯: [4, 7]
# κΈ°μ‘΄ 리μ€νΈλ₯Ό νμΌλ‘ λ³ν
nums = [4, 1, 7, 3, 8, 5]
heapq.heapify(nums)
print(nums) # μΆλ ₯: [1, 3, 5, 4, 8, 7]
μ£Όμμ μ heapq λͺ¨λμ μ΅μ νλ§μ μ§μνλ―λ‘,
μ΅λ νμ ꡬννλ €λ©΄ μμμ λΆνΈλ₯Ό λ°κΏμ λ£κ³ κΊΌλΌ λ λ€μ λ°κΏμ£Όλ λ°©λ²μ μ¬μ©ν΄μΌ νλ€.
μΈμ μ΅λ νμ μ¬μ©ν κΉ?
μμλ€ μ€μμ κ°μ₯ ν° μμλ₯Ό λΉ λ₯΄κ²(!) μ°ΎμμΌ ν κ²½μ°μ΄λ€.
μ΄λ° κ²½μ°μλ μ΅λ ν(Max heapq)μ ꡬνν΄μΌ νλλ°, heapq λͺ¨λμ μ΅λ νμ μ§μνμ§ μλλ€.
μ΄λ° μν©μμ μ¬μ©ν μ μλ κ°λ¨ν λ°©λ²μ
μμμ νμ μΆκ°ν λ κ·Έ κ°μ λΆνΈλ₯Ό λ°κΎΈμ΄ λ£λ κ²μ΄λ€.
μ¦, μμλ₯Ό μμλ‘, μμλ₯Ό μμλ‘ λ°κΎΈμ΄ λ£λλ€.
κ·Έλ¬λ©΄ μλ κ°μ₯ ν° μμκ° κ°μ₯ μμ κ²μΌλ‘ κ°μ£Ό, νμ λ£¨νΈ λ Έλμ μ€κ² λλ€.
μμλ₯Ό κΊΌλΌ λλ λ€μ λΆλ₯Ό λ°κΏ μλμ κ°μ μ»λλ€.
import heapq
nums = [4, 1, 7, 3, 8, 5]
heap = []
# μμλ₯Ό νμ μΆκ°ν λ λΆνΈλ₯Ό λ°κΏμ λ£μ
for num in nums:
heapq.heappush(heap, -num)
# μμλ₯Ό κΊΌλΌ λ λΆνΈλ₯Ό λ€μ λ°κΏ μλμ κ°μ μ»μ
print(-heapq.heappop(heap)) # μΆλ ₯: 8
print(-heapq.heappop(heap)) # μΆλ ₯: 7
Heap κ³Ό κ΄λ ¨λ μκ³ λ¦¬μ¦
1. ν μ λ ¬(Heap sort)
μ΅λ νμ ꡬμ±ν ν, νμ λ£¨νΈ λ Έλ(μ΅λκ°)λ₯Ό λ°°μ΄ λ§μ§λ§ μμμ κ΅ν, νμ ν¬κΈ°λ₯Ό 1 μ€μΈλ€.
μ΄ κ³Όμ μ λ°λ³΅νλ©΄ λ°°μ΄μ΄ μ€λ¦μ°¨ μμΌλ‘ μ λ ¬λλ€.
2. μ°μ μμ ν(Priority Queue)
μ°μ μμ νλ κ° μμκ° μ°μ μμλ₯Ό κ°μ§κ³ μκ³ , μ°μ μμκ° κ°μ₯ λμ μμλΆν° κΊΌλ΄ μ¬μ©νλ μλ£κ΅¬μ‘°μ΄λ€.
νμ μ°μ μμ νλ₯Ό ꡬννλλ° λ§μ΄ μ¬μ©λλ€.
3. λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦(Dijkstra's Algorithm)
μμ 2-4. Graph representation μ 2-4-2. adjacency listμμ μΈκΈλ§ νκ³ λμ΄κ°λλ°,
(https://parkpakrsu.tistory.com/330)
λ€μ΅μ€νΈλΌ μκ³ λ¦¬μ¦μ κ·Έλνμ ν λ Έλμμ λ€λ₯Έ λ Έλλ‘ κ°λ μ΅λ¨ κ²½λ‘λ₯Ό μ°Ύλ μκ³ λ¦¬μ¦μ΄λ€.
μ΄ μκ³ λ¦¬μ¦μ μ°μ μμ νλ₯Ό μ¬μ©ν΄ ꡬνλλ©°, μ΄ λ νμ΄ μ£Όλ‘ μ¬μ©λλ€.
4. ννν(Heapify)
νννλ μ£Όμ΄μ§ λ°μ΄ν°λ₯Ό ν ꡬ쑰λ₯Ό λ§μ‘±νλλ‘ μ¬λ°°μ΄ νλ κ³Όμ .
μ£Όλ‘ ν μ λ ¬, ν μμ± λ±μ μ¬μ©λλ€.
'CS - Roadmap.sh > 1. Data structures' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
Data structures (with python) - 5. Stack (1) | 2024.01.07 |
---|---|
Data structures (with python) - 4. Linked List (0) | 2024.01.06 |
Data structures (with python) - 2. Graph - 2.4. Graph Representation (1) | 2024.01.04 |
Data structures (with python) - 2. Graph - 2.3. Spanning Tree (1) | 2024.01.03 |
Data structures (with python) - 2. Graph - 2.2. Undirected graph (0) | 2024.01.02 |