์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ๋ชจ๊ฐ์ฝ
- ์ฝ๋ฉ์ ํ
- javascript
- CSS
- Python
- ํ์ด์ฌ
- heapq
- ์ฝ๋ฉ
- ํ๋ก๊ทธ๋๋จธ์ค
- ๋ฐฑ์ค
- node.js
- ํ ์ดํ๋ก์ ํธ
- HTML
- ํ๋ก ํธ์๋
- mongodb
- error
- ๊ตญ๋น์ง์
- ๊ฐ๋ฐ
- JS
- ๋๋ฆผ์ฝ๋ฉ
- ํฌ๋กค๋ง
- ํ๋ก์ ํธ
- KDT
- ๊ทธ๋ฆฌ๋
- react
- ๋ ธ๋ง๋์ฝ๋
- ์ฝ๋ฉํ ์คํธ
- fe
- Til
- ์๊ณ ๋ฆฌ์ฆ
- Today
- Total
๐ฑ → ๐ณ
[Python] ํ ์๋ฃ๊ตฌ์กฐ / ํํ(heapq) / ํ์ด์ฌ์์ heapq ๋ชจ๋ ์ฌ์ฉ ๋ณธ๋ฌธ
[Python] ํ ์๋ฃ๊ตฌ์กฐ / ํํ(heapq) / ํ์ด์ฌ์์ heapq ๋ชจ๋ ์ฌ์ฉ
BAY 2023. 5. 30. 13:17ํ์ ํน์ ํ ๊ท์น์ ๊ฐ์ง๋ ํธ๋ฆฌ๋ก, ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ์ฐพ๋ ์ฐ์ฐ์ ๋น ๋ฅด๊ฒ ํ๊ธฐ ์ํด ๊ณ ์๋ ์์ ์ด์งํธ๋ฆฌ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํ๋ค.
ํ property : A๊ฐ B์ ๋ถ๋ชจ๋ ธ๋์ด๋ฉด A์ ํค๊ฐ๊ณผ B์ ํค๊ฐ ์ฌ์ด์๋ ๋์ ๊ด๊ณ๊ฐ ์ฑ๋ฆฝํ๋ค
- ์ต์ ํ: ๋ถ๋ชจ ๋ ธ๋์ ํค๊ฐ์ด ์์ ๋ ธ๋์ ํค๊ฐ๋ณด๋ค ํญ์ ์์ ํ
- ์ต๋ ํ: ๋ถ๋ชจ ๋ ธ๋์ ํค๊ฐ์ด ์์ ๋ ธ๋์ ํค๊ฐ๋ณด๋ค ํญ์ ํฐ ํ
์ด๋ฌํ ์์ฑ์ผ๋ก ์ธํด ํ์์๋ ๊ฐ์ฅ ๋ฎ์(ํน์ ๋์) ์ฐ์ ์์๋ฅผ ๊ฐ์ง๋ ๋ ธ๋๊ฐ ํญ์ ๋ฃจํธ์ ์ค๊ฒ ๋๊ณ ์ด๋ฅผ ์ด์ฉํด ์ฐ์ ์์ ํ์ ๊ฐ์ ์ถ์์ ์๋ฃํ์ ๊ตฌํํ ์ ์๋ค.
์ด๋ ํค๊ฐ์ ๋์ ๊ด๊ณ๋ ๋ถ๋ชจ/์์ ๊ฐ์๋ง ์ฑ๋ฆฝํ๊ณ , ํ์ ๋ ธ๋ ์ฌ์ด์๋ ๋์ ๊ด๊ณ๊ฐ ์ ํด์ง์ง ์๋๋ค.
ํ์ด์ฌ ํ ์๋ฃ๊ตฌ์กฐ
ํ์ด์ฌ heapq ๋ชจ๋์ heapq (priority queue) ์๊ณ ๋ฆฌ์ฆ์ ์ ๊ณตํ๋ค.
๋ชจ๋ ๋ถ๋ชจ ๋ ธ๋๋ ๊ทธ์ ์์ ๋ ธ๋๋ณด๋ค ๊ฐ์ด ์๊ฑฐ๋ ํฐ ์ด์งํธ๋ฆฌ(binary tree) ๊ตฌ์กฐ์ธ๋ฐ, ๋ด๋ถ์ ์ผ๋ก๋ ์ธ๋ฑ์ค 0์์ ์์ํด k๋ฒ์งธ ์์๊ฐ ํญ์ ์์ ์์๋ค(2k+1, 2k+2) ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์ต์ ํ์ ํํ๋ก ์ ๋ ฌ๋๋ค.
heapq๋ ๋ด์ฅ ๋ชจ๋๋ก ๋ณ๋์ ์ค์น ์์ ์์ด ๋ฐ๋ก ์ฌ์ฉํ ์ ์๋ค.
ํ ํจ์ ํ์ฉํ๊ธฐ
- heapq.heappush(heap, item) : item์ heap์ ์ถ๊ฐ
- heapq.heappop(heap) : heap์์ ๊ฐ์ฅ ์์ ์์๋ฅผ pop & ๋ฆฌํด. ๋น์ด ์๋ ๊ฒฝ์ฐ IndexError๊ฐ ํธ์ถ๋จ.
- heapq.heapify(x) : ๋ฆฌ์คํธ x๋ฅผ ์ฆ๊ฐ์ ์ผ๋ก heap์ผ๋ก ๋ณํํจ (in linear time, O(N) )
์ต๋ ํ ๋ง๋ค๊ธฐ
ํ์ด์ฌ์ heapq ๋ชจ๋์ ์ต์ ํ์ผ๋ก ๊ตฌํ๋์ด ์๊ธฐ ๋๋ฌธ์ ์ต๋ ํ ๊ตฌํ์ ์ํด์๋ ํธ๋ฆญ์ด ํ์ํ๋ค.
IDEA: y = -x ๋ณํ์ ํ๋ฉด ์ต์๊ฐ ์ ๋ ฌ์ด ์ต๋๊ฐ ์ ๋ ฌ๋ก ๋ฐ๋๋ค.
ํ์ ์์๋ฅผ ์ถ๊ฐํ ๋ (-item, item)์ ํํ ํํ๋ก ๋ฃ์ด์ฃผ๋ฉด ํํ์ ์ฒซ ๋ฒ์งธ ์์๋ฅผ ์ฐ์ ์์๋ก ํ์ ๊ตฌ์ฑํ๊ฒ ๋๋ค.
์ด๋ ์์ ๊ฐ์ ๋ถํธ๋ฅผ ๋ฐ๊ฟจ๊ธฐ ๋๋ฌธ์, ์ต์ ํ์ผ๋ก ๊ตฌํ๋ heapq ๋ชจ๋์ ์ต๋ ํ ๊ตฌํ์ ํ์ฉํ๊ฒ ๋๋ ๊ฒ์ด๋ค.
์๋์ ์์๋ ๋ฆฌ์คํธ heap_items์ ์๋ ์์๋ค์ max_heap์ด๋ผ๋ ์ต๋ ํ ์๋ฃ๊ตฌ์กฐ๋ก ๋ง๋๋ ์ฝ๋์ด๋ค.
heap_items = [1,3,5,7,9]
max_heap = []
for item in heap_items:
heapq.heappush(max_heap, (-item, item))
print(max_heap)
์ฐธ๊ณ
'Algorithms' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ๋ก๊ทธ๋๋จธ์ค] ํ์ผ ๋๋ฒ - python (0) | 2023.08.02 |
---|---|
[ํ๋ก๊ทธ๋๋จธ์ค] JadenCase ๋ฌธ์์ด ๋ง๋ค๊ธฐ - python (0) | 2023.07.25 |
[๋ฐฑ์ค] 13458๋ฒ: ์ํ ๊ฐ๋ python (0) | 2023.01.11 |
[๋ฐฑ์ค] 11000๋ฒ : ๊ฐ์์ค python (0) | 2023.01.11 |
[๋ฐฑ์ค] 11399๋ฒ: ATM - python (0) | 2023.01.09 |