ํฐ์คํ ๋ฆฌ ๋ทฐ
728x90
๋ฐ์ํ
heapq
์ด์งํธ๋ฆฌ ๊ธฐ๋ฐ์ ์ต์ ํ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ ์ ์๋ค. ๋ง์ฝ ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ ๋ ฌ๋ ์ํ๋ก ์ ์งํ ํ์๊ฐ ์์ ๊ฒฝ์ฐ ๊ณ์ํด์ ์ ๋ ฌ์ ํ๋ ๊ฒ ๋ณด๋ค๋, heapifyํ๋ ๊ฒ์ด ํจ์จ์ ์ด๋ค.
import heapq
heap = []
heapq.heappush(heap, 7)
heapq.heappush(heap, 1)
heapq.heappush(heap, 5)
heapq.heappush(heap, 3)
heapq.heappop(heap)
- ๋ฆฌ์คํธ๋ฅผ ๋ง๋ค๊ณ ๋ฆฌ์คํธ์ ๊ฐ์ ์ฝ์
์ญ์ ํ ๊ฒฝ์ฐ,
heapq
์ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ต์ํ ์ฑ์ง์ ๊ฐ์ง๋ค. - ์ต์ํ์ ๊ฒฝ์ฐ, ๋ชจ๋ ์์(k)๋ ์์ ์์๋ค(2k+1, 2k+2) ๋ณด๋ค ํฌ๊ธฐ๊ฐ ์๋ค.
- ๋ฐ๋ผ์ ํด๋น ์์ ๋ [1, 3, 5, 7]๋ก ์ ๋ ฌ๋์ด ์ต์ํ์ด ์ ์ง๋๊ฒ ๋๋ค.
heappop()
์ ํ ๊ฒฝ์ฐ, ๊ฐ์ ์ญ์ ํ๊ณ ๋ฃจํธ ๋ ธ๋์ ๊ฐ์ ๋ฐํํ๋ค.- ๊ฐ์ ์ญ์ ํ์ง ์๊ณ ๋ฃจํธ ๋
ธ๋์ ๊ฐ์ ๊ฐ์ ธ์ค๋ ค๋ฉด ๋ฆฌ์คํธ ์ฒ๋ผ
heap[0]
๋ฅผ ํตํด ์ ๊ทผํ๋ฉด ๋๋ค.
- ๊ฐ์ ์ญ์ ํ์ง ์๊ณ ๋ฃจํธ ๋
ธ๋์ ๊ฐ์ ๊ฐ์ ธ์ค๋ ค๋ฉด ๋ฆฌ์คํธ ์ฒ๋ผ
heap = [1, 3, 9, 10, 4]
heapq.heapify(heap)
- ๊ธฐ์กด์ ๋ฆฌ์คํธ๋ฅผ ์ต์ํ์ผ๋ก ๋ง๋ค๊ธฐ ์ํด์๋
heapify
๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
heapq ์์ฉ
์ต๋ ํ
import heapq
heap = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]
heapq._heapify_max(heap)
heapq._heappop_max(heap)
- heapq ๋ด์์ ์ ๊ณตํ๋
_heapify_max
,_heappop_max
๋ฅผ ์ฌ์ฉํ๋ฉด, ์ต๋ ํ ๊ตฌ์กฐ๋ฅผ ๊ฐ๋ตํ ์์ฑํ ์ ์๋ค.- ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด,
heappush_max
๊ฐ ์์ด ์ถ๊ฐ, ์ญ์ ๊ฐ ๊ณ์ ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ์ด ๋ถ๊ฐ๋ฅํ๋ค.
- ํ์ง๋ง ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ฉด,
import heapq
nums = [1, 3, 9, 10, 4]
heap = []
for num in nums:
heapq.heappush(heap, (-num, num))
root = heapq.heappop(heap)[1]
_heapify_max
,heappop_max
๋ ํ์ ์์๊ฐ ์ฝ์ , ์ญ์ ๊ฐ ๋ฐ๋ณต๋๋ ๊ฒฝ์ฐ์๋ ์ฌ์ฉํ ์ ์๋ค. ๋ฐ๋ผ์ ๊ธฐ์กด์ ์ต์ํ ์ฑ์ง๊ณผ ํํ์ ์ด์ฉํด ๊ฐ๋จํ ์ต๋ ํ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค.- ํํ์ ์ด์ฉํด
(-num, num)
๊ณผ ๊ฐ์ด ์์ ๊ฐ์ ๊ฐ์ด ์ฝ์ ํ๋ค. - ์ ๊ทผํ ๋
heappop(heap)[1]
๋ก ์ ๊ทผํ์ฌ ํํ์ 2์ด์ ์ ๊ทผํ์ฌ ์๋์ ๊ฐ์ ๊ฐ์ ธ์จ๋ค.
728x90
๋ฐ์ํ
'๐โโ๏ธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด > Python' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Python: sort, sorted ํ์ฉํ๊ธฐ (0) | 2020.09.23 |
---|---|
Python: ๋ฌธ์ ์ ๊ทผ ์๋๋ฅผ ๋์ฌ์ฃผ๋ ์ฝ๋๋ค (0) | 2020.06.07 |
Python: itertools ํ์ฉํ๊ธฐ (0) | 2020.06.06 |
Python: collections ํ์ฉํ๊ธฐ (0) | 2020.06.05 |
Python: List ํ์ฉํ๊ธฐ (0) | 2020.06.03 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ