๐ ์๋ฃ๊ตฌ์กฐ - ์ฐ์ ์์ ํ์ ์๊ฐ๋ณต์ก๋๋ ์ด๋ป๊ฒ ๋๋ฉฐ ๊ทธ ์ด์ ๋ ๋ฌด์์ธ์ง ์ค๋ช ํด ๋ณด์์ค.
์ฐ์ ์์ ํ(Priority Queue)
์ฐ์ ์์ ํ๋ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ์์๊ฐ ๋จผ์ ์ฒ๋ฆฌ๋๋ ์๋ฃ๊ตฌ์กฐ๋ก, ์ฃผ๋ก ํ(Heap)์ ์ฌ์ฉํด ๊ตฌํ๋จ.
์ฆ, ๋ค์ด๊ฐ ์์์ ์๊ด์์ด ์ฐ์ ์์๊ฐ ๋์ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋์ค๋ ๊ฒ์ ๋งํจ.
์ฃผ์ ๋์
insert
delete
peek() : ์ฐ์ ์์ ํ์์ ์ต๋ ์ฐ์ ์์ ๊ฐ์ ๋ฐํํจ. ์ต๋ ์ฐ์ ์์ ๊ฐ(์ต๋ ํ)์ ํญ์ ๋ฃจํธ์ ์์ผ๋ฏ๋ก ๋ฃจํธ ๊ฐ์ ๋ฐํํจ.
4 -> 8 -> 2 ์์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋ค์ด๊ฐ๋ค๊ณ ํ ๋, ์ฐ์ ์์ ํ์ ์ฒ๋ฆฌ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค. (๋์ ๊ฐ์ด ๋์ ์ฐ์ ์์๋ฅผ ๊ฐ๋๋ค๊ณ ๊ฐ์ )
input : 4 -> 8 -> 2 queue : 4 -> 8 -> 2 priority queue : 8 -> 4 -> 2
๊ตฌํ
๊ตฌํ ๋ฐฉ๋ฒ | enqueue() | dequeue() |
---|---|---|
๋ฐฐ์ด (unsorted array) | O(1) | O(N) |
์ฐ๊ฒฐ ๋ฆฌ์คํธ (unsorted linked list) | O(1) | O(N) |
์ ๋ ฌ๋ ๋ฐฐ์ด (sorted array) | O(N) | O(1) |
์ ๋ ฌ๋ ์ฐ๊ฒฐ ๋ฆฌ์คํธ (sorted linked list) | O(N) | O(1) |
ํ (heap) | O(logN) | O(logN) |
- ํ ๋ฐฉ์์ด ์ต์ ์ ๊ฒฝ์ฐ๋ผ๋ O(logN)์ ๋ณด์ฅํ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ์ ์ผ๋ก ํ์ ๊ฐ์ง๊ณ ๊ตฌํ์ ํ๋ค.
1
2
3
4
5
6
// ๋ฎ์ ์๊ฐ ์ฐ์ ์์๋ฅผ ๊ฐ์ง
PriorityQueue<Integer> pq = new PriorityQueue<>();
// ๋์ ์๊ฐ ์ฐ์ ์์๋ฅผ ๊ฐ์ง
PriorityQueue<Integer> pq = new PriorityQueue<>(Collections.reverseOrder());
// ์ฌ์ ์์ผ๋ก ๋ ๋นจ๋ฆฌ์ค๋ ๋ฌธ์์ด์ด ์ฐ์ ์์๋ฅผ ๊ฐ์ง
PriorityQueue<String> pq = new PriorityQueue<>();
ํ(Heap)
ํ์ ์์ ์ด์ง ํธ๋ฆฌ(Complete Binary Tree) ํํ๋ก ๊ตฌํ๋๋ฉฐ, ๋ ธ๋๋ค์ ์ต๋ ํ(Max Heap) ๋๋ ์ต์ ํ(Min Heap)์ ๊ธฐ๋ฐ์ผ๋ก ์ฐ์ ์์๊ฐ ์ ํด์ง๋ค.
ํธ๋ฆฌ(tree) : ๋ถ๋ชจ-์๋ ์ฒ๋ผ ๊ณ์ธต์ ์ธ ํํ๋ฅผ ๊ฐ์ง๋ ๊ตฌ์กฐ
์ด์ง ํธ๋ฆฌ(binary tree) : ์๋ ๊ฐ ์ต๋ ๋ ๊ฐ์ธ ํธ๋ฆฌ
max heap : ๋ถ๋ชจ ๋ ธ๋์ ํค(key)๊ฐ ์์ ๋ ธ๋์ ํค(key)๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ํธ๋ฆฌ
min heap : ๋ถ๋ชจ ๋ ธ๋์ ํค(key)๊ฐ ์์ ๋ ธ๋์ ํค(key)๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ํธ๋ฆฌ
์ฃผ์ ๋์
insert
delete
peek
์ ๋ฆฌ
์ฐ์ ์์ ํ(Priority Queue)๋ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ์์๊ฐ ๋จผ์ ์ฒ๋ฆฌ๋๋ ์๋ฃ๊ตฌ์กฐ์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ํ(Heap)์ ์ฌ์ฉํ์ฌ ๊ตฌํ๋๋ฉฐ, ์ฐ์ ์์ ํ์ ์ฝ์ (insert)๊ณผ ์ญ์ (delete) ์ฐ์ฐ์ ๋ชจ๋ O(log n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๊ฐ์ง๋ค.
ํ(Heap)์ ์์ ์ด์ง ํธ๋ฆฌ(Complete Binary Tree)๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉฐ, ์ด์ง ํธ๋ฆฌ๋ ๊ฐ ๋ ธ๋๊ฐ ์์ ๋ ธ๋๋ณด๋ค ์ฐ์ ์์๊ฐ ๋๊ฑฐ๋ ๊ฐ์ ์์ฑ์ ์ ์งํ๋ค.
์ต๋ ํ(Max Heap)์์๋ ๋ถ๋ชจ ๋ ธ๋์ ํค๊ฐ ์์ ๋ ธ๋๋ค์ ํค๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ๊ณ , ์ต์ ํ(Min Heap)์์๋ ๋ถ๋ชจ ๋ ธ๋์ ํค๊ฐ ์์ ๋ ธ๋๋ค์ ํค๋ณด๋ค ์๊ฑฐ๋ ๊ฐ๋ค. ์ด๋ฌํ ํน์ฑ์ผ๋ก ํ์ ์ฝ์ ๋ฐ ์ญ์ ์ฐ์ฐ์ ํจ์จ์ ์ผ๋ก ์ฒ๋ฆฌํ ์ ์๋ค.
์ฝ์ ์ฐ์ฐ (insert): ์๋ก์ด ์์๋ฅผ ํ์ ์ถ๊ฐํ ๋, ํ์ ๋ง์ง๋ง ๋ ธ๋์ ์์๋ฅผ ์ฝ์ ํ๊ณ , ํด๋น ์์๋ฅผ ์ ์ ํ ์์น๋ก โํ ์ ๋ ฌโํ๋ฉด์ ์ด๋์ํจ๋ค. ์ด ๊ณผ์ ์์ ํธ๋ฆฌ์ ๋์ด์ ๋น๋กํ์ฌ ๋น๊ต์ ๊ตํ์ด ์ผ์ด๋๋ฏ๋ก ์๊ฐ๋ณต์ก๋๋ O(log n)์ด๋ค.
์ญ์ ์ฐ์ฐ (delete): ์ฐ์ ์์ ํ์์ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ์์(์ต์์ ์์, ๋ฃจํธ)๋ฅผ ์ญ์ ํ ๋๋, ๋ฃจํธ ์์๋ฅผ ์ญ์ ํ๊ณ ๋ง์ง๋ง ์์๋ฅผ ๋ฃจํธ๋ก ์ฌ๋ฆฐ ๋ค, ํด๋น ์์๋ฅผ ์ ์ ํ ์์น๋ก โํ ์ ๋ ฌโํ๋ค. ์ด ๊ณผ์ ์์๋ ๋น๊ต์ ๊ตํ์ด ์ผ์ด๋๋ฏ๋ก ์๊ฐ๋ณต์ก๋๋ O(log n)์ด๋ค.
peek ์ฐ์ฐ: ์ฐ์ ์์ ํ์์ ์ฐ์ ์์๊ฐ ๊ฐ์ฅ ๋์ ๊ฐ์ ํ์ธํ๋ ์ฐ์ฐ์ O(1)์ด๋ค. ์ด๋ ๋ฃจํธ ๋ ธ๋์ ๊ฐ์ ๋ฐ๋ก ๋ฐํํ๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์, ์ฐ์ ์์ ํ๋ ํ์ ์ฌ์ฉํ์ฌ ๊ตฌํํ๋ฉด ์ต์ ์ ๊ฒฝ์ฐ์๋ O(log n)์ ์๊ฐ๋ณต์ก๋๋ฅผ ๋ณด์ฅํ๋ฉฐ, ํจ์จ์ ์ธ ์ฐ์ ์์ ๊ธฐ๋ฐ ์ฒ๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ค.