2024. 1. 15. 21:23γCS - Roadmap.sh/3. Common Algorithms
CS - 3. Common Algorithms - 3.1. Sorting - 3.1.4 Heap Sort
π‘Heap sort is a comparison based sorting algorithm. It is similar to selection sort where we first find the maximum element and place the maximum element at the end. We repeat the same process for remaining element.
ν μ λ ¬μ λΉκ΅ κΈ°λ° μ λ ¬ μκ³ λ¦¬μ¦μ λλ€. λ¨Όμ μ΅λ μμλ₯Ό μ°Ύμ λ€μ μ΅λ μμλ₯Ό λ§μ§λ§μ λ°°μΉνλ μ ν μ λ ¬κ³Ό μ μ¬ν©λλ€. λλ¨Έμ§ μμμ λν΄μλ λμΌν κ³Όμ μ λ°λ³΅ν©λλ€.
μμμ λ°μ΄ν°μ μμ΄ λ§κ±°λ 무μμλ‘ λ°°μ΄λ λ°μ΄ν°μΌ κ²½μ° ν΅, ν κ°μ κ³ κΈ μ λ ¬ μκ³ λ¦¬μ¦μ μ¬μ©νλ κ²μ΄ μ’λ€κ³ λ§νμμ΅λλ€.
κ·Έλμ μΌλ§λ μ’μμ§ μμλ΄ μλ€.
ν μ λ ¬ (Heap Sort)μ νμ΄λΌλ νΉλ³ν μ΄μ§ νΈλ¦¬ μλ£κ΅¬μ‘°λ₯Ό μ¬μ©νλ μ λ ¬ μκ³ λ¦¬μ¦ μ λλ€.
νμ https://parkpakrsu.tistory.com/331
λ€λ€μ΅λλ€.
νμ€λ‘ μμ½νλ€λ©΄
'μ΅λκ° λλ μ΅μκ°μ λΉ λ₯΄κ² μ°ΎκΈ° μν΄ μ¬μ©λλ λΆλͺ¨-μμ λ Έλκ°μ κ΄κ³λ₯Ό λ°νμΌλ‘ μ λ ¬λλ μμ μ΄μ§ νΈλ¦¬.'
λΌκ³ ν μ μκ² λ€.
λΆλͺ¨ λ Έλμ κ°μ΄ μμλ Έλμ κ°λ³΄λ€ νμ ν¬κ±°λ μμνΉμ±μ κ°μ§κ³ μλ€.
μ΄λ° νΉμ± λλ¬Έμ νμ νλ μ λ ¬μ νλλ° κ°λ ₯ν μ±λ₯μ λ°ννλ€.
ν μ λ ¬(Heap Sort)λ μ΄λ¬ν νμ νΉμ±μ μ΄μ©ν©λλ€.
λ¨Όμ λ°°μ΄μ μ΅λ νμ ννλ‘ λ³νν λ€, νμΌ γ £λ£¨νΈμ νμ μ΅λκ°μ΄ μμΉνκ²λ λ§λλλ€.
κ·Έλ¦¬κ³ μ΄ μ΅λκ°μ νμ λ§μ§λ§ λ Έλμ κ΅ννκ³ ν ν¬κΈ°λ₯Ό νλ μ€μ¬ μ λ ¬μ μ§νν©λλ€.
ν μ λ ¬μ λμ κ³Όμ μ μ΄λ μ΅λλ€.
1. μ λ ₯ λ°°μ΄μ μ΅λ νμΌλ‘ λ³νν©λλ€.
2. νμ 루νΈ(μ΅λκ°)μ νμ λ§μ§λ§ μμμ κ΅νν©λλ€.
3. ν ν¬κΈ°λ₯Ό 1 μ€μ λλ€.(μ¦, λ§μ§λ§ μμλ₯Ό νμμ μ κ±°ν©λλ€.)
4. μλ‘μ΄ λ£¨νΈμ λν΄ νμ μ¬μ‘°μ ν©λλ€.
5. μμ κ³Όμ μ νμ ν¬κΈ°κ° 1μ΄ λ λκΉμ§ λ°λ³΅ν©λλ€.
In Python
import heapq
def heap_sort(arr):
heapq.heapify(arr)
return [heapq.heappop(arr) for _ in range(len(arr))]
νμ΄μ¬μμλ heapq λͺ¨λμ ν΅ν΄ ꡬνν μ μμ΅λλ€.
μ’λ ꡬ체μ μΈ μμλ₯Ό λ€κ² μ΅λλ€.
# 1. νμμ±
import heapq
numbers = [1, 3, 5, 7, 9, 2, 4, 6, 8, 0]
heapq.heapify(numbers)
# 2. μμ μΆκ° :heappush O(log n)
heapq.heappush(numbers, -5)
# 3. μμ μ κ±° :heappop O(log n)
smallest = heapq.heappop(numbers)
# 4. μ΅λ/μ΅μκ° μ‘°ν : νμ΄μ¬μ νμ μ΅μ ν(min heap)μ΄λ―λ‘, κ°μ₯ μμ κ°μ νμ μΈλ±μ€ 0, μ¦ νμ 루νΈμ μμΉν©λλ€.
# λ°λΌμ O(1)μ μκ° λ³΅μ‘λλ‘ μ΅μκ°μ μ‘°νν μ μμ΅λλ€.
smallest = numbers[0]
# 5. μ°μ μμ ν μν : ννμ 리μ€νΈλ₯Ό νμΌλ‘ λ§λ€λ©΄ 첫 λ²μ¨° μμλ₯Ό κΈ°μ€μΌλ‘ μ΅μ νμ΄ κ΅¬μ±λ©λλ€.
# μ΄λ₯Ό μ΄μ©νλ©΄ μ°μ μμμ κ°μ΄ μμΌλ‘ μ΄λ£¨μ΄μ§ λ°μ΄ν°λ₯Ό κ΄λ¦¬νλλ° μ μ©ν©λλ€.
priority_queue = []
heapq.heappush(priority_queue, (2, 'code'))
heapq.heappush(priority_queue, (1, 'eat'))
heapq.heappush(priority_queue, (3, 'sleep'))
while priority_queue:
print(heapq.heappop(priority_queue)[1]) # 'eat', 'code', 'sleep' μμλ‘ μΆλ ₯
μ 리
ν μ λ ¬μ μκ° λ³΅μ‘λλ O(log n)μΌλ‘, λλΆλΆμ κ²½μ°μμ ν¨μ¨μ μΌλ‘ μλν©λλ€.
ν μ λ ¬μ λ°μ΄ν°μ μ λ ₯ μνμ κ΄κ³μμ΄ μΌμ ν μ€ν μκ°μ κ°μ§λ κ²μ΄ νΉμ§μ λλ€.
μ¦, μ΄λ―Έ μ λ ¬λ λ°μ΄ν°λ μμμΌλ‘ μ λ ¬λ λ°μ΄ν°μγ λν΄μλ μκ° λ³΅μ‘λλ λ³νμ§ μμ΅λλ€.
λ°λΌμ, μ λ ¬λμ§ μμ λ°μ΄ν°λ₯Ό μ λ ¬ν΄μΌ νλ κ²½μ°λ μ΅μ μ κ²½μ°μ μκ° λ³΅μ‘λκ° μ€μν κ²½μ° μ μ©νκ² μ¬μ©ν μ μμ΅λλ€.
'CS - Roadmap.sh > 3. Common Algorithms' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
3.1. Sorting - 3.1.6 Merge Sort (0) | 2024.01.20 |
---|---|
3.1 Sorting - 3.1.5 Quick Sort (0) | 2024.01.16 |
3.1. Sorting - 3.1.3 Insertion Sort (0) | 2024.01.15 |
3.1. Sorting - 3.1.2 Selection Sort (1) | 2024.01.14 |
3.1. Sorting - 3.1.1 Bubble sort (1) | 2024.01.13 |