ํ (Heap)
- ๋ํ์ ์ธ ์ฐ์ ์์ ํ
- ์์ ์ด์ง ํธ๋ฆฌ ๊ตฌ์กฐ ์ฌ์ฉ
- ํ์์๋ ๋ชจ๋ ๋ถ๋ชจ ๋ ธ๋๊ฐ ์์ ๋ ธ๋๋ณด๋ค ํฌ๊ฑฐ๋(์ต๋ ํ) ํน์ ์์(์ต์ ํ)
- ์์๋ฅผ ๊ฒ์ํ ์ ์๋ ๊ธฐ๋ฅ์ ํ์์๊ณ , ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ๊ฒ์ ์๋ ค์ฃผ๊ณ ์ญ์ ํ ์ ์์ผ๋ฉด ๋จ
- ์ฌ์ฉ ์์ : ์ด์ ์ฒด์ ์์ ํ๋ก์ธ์ค ์ค์ผ์ค๋ง, ๋คํธ์ํฌ ํธ๋ํฝ ๊ด๋ฆฌ, ์๋ฎฌ๋ ์ด์ ์์คํ ๋ฑ
- ํ๊ณผ ์ด์ง ํธ๋ฆฌ๋ ๋ชจ๋ ๊ณ์ธต์ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ๊ณ ์ฒ๋ฆฌํ๋ ๋ฐ ์ ์ฉํ ์๋ฃ๊ตฌ์กฐ
- ํ์ ์ฃผ๋ก ์ฐ์ ์์์ ๋ฐ๋ฅธ ๋ฐ์ดํฐ ์ฒ๋ฆฌ์, ์ด์ง ํธ๋ฆฌ(ํนํ ์ด์ง ํ์ ํธ๋ฆฌ)๋ ์ ๋ ฌ๋ ๋ฐ์ดํฐ์ ํจ์จ์ ์ธ ํ์์ ์ฌ์ฉ
์ฐ์ ์์ ํ ADT
[ํต์ฌ ์์ ]
์์๋ฅผ ์ฝ์ ํ๋ค
์ต๋ ์์๋ฅผ ์๋ ค์ฃผ๋ฉด์ ์ญ์ ํ๋ค
์ต๋ ์์๋ฅผ ์๋ ค์ค๋ค
[๊ณตํต]
์ฐ์ ์์ ํ๊ฐ ๋น์ด ์๋์ง ํ์ธํ๋ค
์ฐ์ ์์ ํ๋ฅผ ๊นจ๋์ด ๋น์ด๋ค
์ฃผ์ ์ฉ์ด
- ๋ ธ๋(Node): ํธ๋ฆฌ์ ๊ธฐ๋ณธ ๋จ์๋ก, ํ์์ ๊ฐ ๋ ธ๋๋ ๋ฐ์ดํฐ๋ฅผ ํฌํจ
- ๋ฃจํธ ๋ ธ๋(Root Node): ํธ๋ฆฌ์ ์ต์๋จ์ ์์นํ ๋ ธ๋. ํ์์๋ ์ต๋ ํ์ ๊ฒฝ์ฐ ์ต๋๊ฐ, ์ต์ ํ์ ๊ฒฝ์ฐ ์ต์๊ฐ
- ๋ฆฌํ ๋ ธ๋(Leaf Node) ๋๋ ๋ง๋จ ๋ ธ๋(Terminal Node): ์์ ๋ ธ๋๊ฐ ์๋ ๋ ธ๋. ํ์์ ๋ฆฌํ ๋ ธ๋๋ ํธ๋ฆฌ์ ๊ฐ์ฅ ๋ฎ์ ๋ ๋ฒจ์ ์์นํจ
- ๋ถ๋ชจ ๋ ธ๋(Parent Node)์ ์์ ๋ ธ๋(Child Node): ํ์์ ๊ฐ ๋ ธ๋๋ ์ต๋ ๋ ๊ฐ์ ์์ ๋ ธ๋๋ฅผ ๊ฐ์ง ์ ์์ผ๋ฉฐ, ๊ฐ ์์ ๋ ธ๋๋ ํ๋์ ๋ถ๋ชจ ๋ ธ๋๋ฅผ ๊ฐ์ง
- ๋ ๋ฒจ(Level): ๋ฃจํธ ๋ ธ๋๋ก๋ถํฐ์ ๊ฑฐ๋ฆฌ. ๋ฃจํธ ๋ ธ๋๋ ๋ ๋ฒจ 0์ ์์นํจ
์ฐ์ ์์ ํ์ ์๋ ์๋ฆฌ
- ์ฝ์ (Enqueue): ์ ์์๋ ํ์ ๊ฐ์ฅ ๋ง์ง๋ง์ ์ถ๊ฐ๋ ํ, ๋ถ๋ชจ ๋ ธ๋์ ๋น๊ตํ๋ฉด์ ์ฌ๋ฐ๋ฅธ ์์น๋ก ์ด๋. ์ด ๊ณผ์ ์ ์ฐ์ ์์๋ฅผ ์ ์งํ๊ธฐ ์ํด ์ํ
- ์ญ์ (Dequeue): ํ์์ ์์๋ฅผ ์ญ์ ํ ๋๋ ๋ณดํต ๋ฃจํธ ๋ ธ๋๋ฅผ ์ญ์ . ์ดํ ๊ฐ์ฅ ๋ง์ง๋ง ์์๋ฅผ ๋ฃจํธ๋ก ์ด๋์ํจ ํ, ์ฌ๋ฐ๋ฅธ ์์น๋ก ์ด๋์ํต๋๋ค. ์ด ๊ณผ์ ์ ํ ์์ฑ์ ์ ์งํ๊ธฐ ์ํด ์ํ
ํ์ ๊ธฐ๋ณธ ์ฐ์ฐ
- ํ(Heap)์ ์กฐ์ํ ๋ ์ฌ์ฉ๋๋ ๋ ๊ฐ์ง ๊ธฐ๋ณธ ์ฐ์ฐ
- ์์์ ์ถ๊ฐ์ ์ ๊ฑฐ ์์ ํ์ ์์ฑ์ ์ ์งํจ์ผ๋ก์จ, ์ฐ์ ์์ ํ๋ ํญ์ ์ฌ๋ฐ๋ฅธ ์์๋ก ์์๋ฅผ ์ฒ๋ฆฌํ ์ ์์
PriorityQueue ํด๋์ค์ ๊ฐ์ ์ฐ์ ์์ ํ ๊ตฌํ์ฒด์์๋ "์ค๋ฉฐ์ค๋ฅด๊ธฐ" (Percolate Up)์ "์ค๋ฉฐ๋ด๋ฆฌ๊ธฐ" (Percolate Down)์ ๊ฐ์ ์ฐ์ฐ์ด ๋ด๋ถ์ ์ผ๋ก ๊ตฌํ๋์ด ์์.
offer() ๋ฉ์๋๋ ์ ์์๋ฅผ ์ถ๊ฐํ๋ฉฐ ๋ด๋ถ์ ์ผ๋ก "์ค๋ฉฐ์ค๋ฅด๊ธฐ"๋ฅผ ์ํํ๊ณ ,
poll() ๋ฉ์๋๋ ์์๋ฅผ ์ ๊ฑฐํ๋ฉฐ ๋ด๋ถ์ ์ผ๋ก "์ค๋ฉฐ๋ด๋ฆฌ๊ธฐ"๋ฅผ ์ํํจ.
์ค๋ฉฐ์ค๋ฅด๊ธฐ (Percolate Up, Up-Heapify)
- ์ค๋ฉฐ์ค๋ฅด๊ธฐ๋ ์๋ก์ด ์์๊ฐ ํ์ ์ถ๊ฐ๋ ๋ ์ฌ์ฉ๋๋ ์ฐ์ฐ
- ์ ์์๋ ์ฒ์์ ํ์ ๋ง๋จ(์ฆ, ํธ๋ฆฌ์ ๊ฐ์ฅ ๋ฎ์ ๋ ๋ฒจ์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ)์ ์ฝ์ ๋จ
- ๊ทธ๋ค์ ํ์ ์์ฑ์ ๋ง์กฑ์ํค๊ธฐ ์ํด ์๋ก "์ค๋ฉฐ์ค๋ฅด๊ฒ" ๋จ
- ์ ์์๋ฅผ ํ์ ๋ง๋จ์ ์ฝ์ ํฉ๋๋ค.
- ์ฝ์ ๋ ์์๋ฅผ ๊ทธ ๋ถ๋ชจ์ ๋น๊ตํฉ๋๋ค.
- ํ์ ์์ฑ์ ๋ฐ๋ผ, ์ฝ์ ๋ ์์๊ฐ ๋ถ๋ชจ๋ณด๋ค ์ฐ์ ์์๊ฐ ๋์ผ๋ฉด(์ต๋ ํ์์๋ ๋ ํฌ๊ณ , ์ต์ ํ์์๋ ๋ ์์ผ๋ฉด), ๊ทธ ์์๋ฅผ ๋ถ๋ชจ์ ๊ตํํฉ๋๋ค.
- ์ด ๊ณผ์ ์ ์์๊ฐ ๋ ์ด์ ๊ตํ๋์ง ์๊ฑฐ๋ ๋ฃจํธ์ ๋๋ฌํ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
์ค๋ฉฐ๋ด๋ฆฌ๊ธฐ (Percolate Down, Down-Heapify)
- ์ค๋ฉฐ๋ด๋ฆฌ๊ธฐ๋ ํ์์ ์์๋ฅผ ์ ๊ฑฐํ ๋ ์ฌ์ฉ๋๋ ์ฐ์ฐ
- ํ์์๋ ๋ณดํต ๋ฃจํธ ์์(์ต๋ ํ์์๋ ์ต๋๊ฐ, ์ต์ ํ์์๋ ์ต์๊ฐ)๊ฐ ์ ๊ฑฐ๋จ
- ๋ฃจํธ ์์๋ฅผ ์ ๊ฑฐํ ํ, ํ์ ๋ง๋จ์์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์๋ ์์๋ฅผ ๋ฃจํธ๋ก ์ด๋์ํด
- ์ด ์์๋ฅผ "์ค๋ฉฐ๋ด๋ฆฌ๊ฒ" ํ์ฌ ํ์ ์์ฑ์ ๋ณต๊ตฌํจ
- ๋ง๋จ์ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ ์์๋ฅผ ๋ฃจํธ๋ก ์ด๋์ํต๋๋ค.
- ์ด ์์์ ๊ทธ ์์๋ค์ ๋น๊ตํฉ๋๋ค.
- ํ์ ์์ฑ์ ๋ฐ๋ผ, ์ด ์์๊ฐ ์์๋ค๋ณด๋ค ์ฐ์ ์์๊ฐ ๋ฎ์ผ๋ฉด(์ต๋ ํ์์๋ ๋ ์๊ณ , ์ต์ ํ์์๋ ๋ ํฌ๋ฉด), ๊ฐ์ฅ ์ฐ์ ์์๊ฐ ๋์ ์์๊ณผ ๊ตํํฉ๋๋ค.
- ์ด ๊ณผ์ ์ ์์๊ฐ ๋ ์ด์ ๊ตํ๋์ง ์๊ฑฐ๋ ๋ฆฌํ ๋ ธ๋์ ๋๋ฌํ ๋๊น์ง ๋ฐ๋ณตํฉ๋๋ค.
'๐๏ธ ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ > ์๊ณ ๋ฆฌ์ฆ,์๋ฃ๊ตฌ์กฐ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[์ ๋ ฌ] ๊ณ ๊ธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ(๋ณํฉ/ํต/ํ/์ ) (1) | 2023.11.21 |
---|---|
[์ ๋ ฌ] ๊ธฐ๋ณธ ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ(์ ํ/๋ฒ๋ธ/์ฝ์ ) (1) | 2023.11.21 |
[ํ] ๋ฐฐ์ด ๊ธฐ๋ฐ ํ์ ์ฐ๊ฒฐ๋ฆฌ์คํธ ๊ธฐ๋ฐ ํ (2) | 2023.11.21 |
[์คํ] ๋ฐฐ์ด ๊ธฐ๋ฐ ์คํ๊ณผ ์ฐ๊ฒฐ ๋ฆฌ์คํธ ๊ธฐ๋ฐ ์คํ (0) | 2023.11.21 |
[๋ฆฌ์คํธ] ๋ฐฐ์ด ๋ฆฌ์คํธ์ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (1) | 2023.11.21 |