λͺ©μ°¨
νμ΄μ¬μ heapq λΌμ΄λΈλ¬λ¦¬μ λν΄μ μμ보μ!
1. μκ°
heap μλ£κ΅¬μ‘°λ₯Ό ꡬννλ λ΄μ₯ λͺ¨λμ΄κ³ μ΅μ νμ κΈ°λ³ΈμΌλ‘ μ 곡νλ€.
λ°λΌμ κ°μ₯ μμ μμκ° λ£¨νΈ λ Έλκ° λλ€.
2. μ£Όμ ν¨μλ€
- heapify(리μ€νΈ) : 리μ€νΈλ₯Ό νμΌλ‘ λ³ν
- heappush(ν, μμ) : μλ‘μ΄ μμ μΆκ°
- heappop(ν) : νμμ λ£¨νΈ λ Έλ μ κ±° λ° λ°ν
- heapreplace(ν, μμ) : νμμ λ£¨νΈ λ Έλλ₯Ό μ κ±°νκ³ μλ‘μ΄ μμ μΆκ° ( pop&push ν λ²μ! )
- nlargeset(n, iterable, key=None) : iterable κ°μ²΄μμ nκ°μ κ°μ₯ ν° μμ λ°ν(리μ€νΈ νν)
- nsamllest(n, iterable, key=None) : iterable κ°μ²΄μμ nκ°μ κ°μ₯ μμ μμ λ°ν(리μ€νΈ νν)
3. μμ
0) λͺ¨λ import λ° λ¦¬μ€νΈ μ μΈ
import heapq
li = [9, 4, 2, 8, 5, 1, 7 ,6, 3]
1) heapify(리μ€νΈ)
heapq.heapify(li)
print(li)
>>> [1, 3, 2, 4, 5, 9, 7, 6, 8]
리μ€νΈλ₯Ό μ΅μνμΌλ‘ λ³ννμλ€.
κ°μ₯ μμ μμκ° λ£¨νΈ λ Έλ μλ¦¬μΈ κ°μ₯ μμ μμΉνκ³ , λΆλͺ¨λ Έλκ° νμ μμ λ Έλλ³΄λ€ μμ κ°μ κ°μ§λ€.
λΆλͺ¨λ Έλ μΈλ±μ€ = (μμλ Έλ μΈλ±μ€- 1) // 2 (2λ‘ λλ λͺ«)
2) heappush(ν, μμ)
heapq.heappush(li, 10)
print(li)
>>> [1, 3, 2, 4, 5, 9, 7, 6, 8, 10]
μμλ₯Ό pushνλ€. μ΄λ heapμ μ±μ§μ μ μ§νλ©° push λλ€.
3) heappop(ν)
sItem = heapq.heappop(li)
print(sItem)
print(li)
>>> 1
>>> [2, 3, 7, 4, 5, 9, 10, 6, 8]
νμ 루νΈλ Έλλ₯Ό μμ νκ³ λ°ννλ€.
4) heapreplace(ν, μμ) pop&push νλ²μ
heapq.heapreplace(li, 11)
print(li)
>>> [3, 4, 7, 6, 5, 9, 10, 11, 8] # 2κ° pop λκ³ 11 push
λ£¨νΈ λ Έλλ₯Ό popνκ³ μΈμλ‘ μ λ¬ν μμλ₯Ό pushνλ€.
5) nlargeset(n, iterable, key=None)
largestItems = heapq.nlargest(3, li)
>>> [11, 10, 9]
μΈμλ‘ μ λ¬ν iterableμ κ°μ₯ ν° nκ°λ₯Ό λ°°μ΄μ ννλ‘ λ°ννλ€.
print(heapq.nlargest(3,[0,4,3,2,1]))
>>> [4, 3, 2]
6) nsamllest(n, iterable, key=None)
smallestItems = heapq.nsmallest(3, li)
>>> [3, 4, 5]
μΈμλ‘ μ λ¬ν iterableμ κ°μ₯ μμ nκ°λ₯Ό λ°°μ΄μ ννλ‘ λ°ννλ€.
4. μ΅λνμΌλ‘ λ³ννκΈ°
heapq λͺ¨λμ κΈ°λ³Έμ μΌλ‘ μ΅μνμ μ§μνλ€.
νμ§λ§ 'μμμ -λ₯Ό λΆμ¬μ νμ ꡬμ±'ν ν
λ€μ ν λ² λͺ¨λ μμλ₯Ό μμλ‘ λ°κΎΌλ€λ©΄ μ΅λνμ ꡬμ±ν μ μλ€.
import heapq
li = [4, 1, 7, 3, 8, 5]
heap = [-num for num in lst] # λͺ¨λ μμλ₯Ό μμλ‘ λ³ν
heapq.heapify(heap) # νμΌλ‘ λ³ν
print(-heapq.heappop(heap)) # μμλ₯Ό λ€μ μμλ‘ λ³ννμ¬ μ΅λκ° μΆλ ₯
'π¦ | μ½λ©ν μ€νΈ μ°μ΅ > μ½ν μ© νμ΄μ¬ λ¬Έλ² λͺ¨μ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Python] νμ΄μ¬ μ½λ©ν μ€νΈλ₯Ό μν κ°λ μ 리 (1) | 2023.01.04 |
---|
λκΈ