์ฐ์ ์์
ํ๋ฅผ ์ํด ๋ง๋ค์ด์ง ์๋ฃ๊ตฌ์กฐ
- ์์ ์ด์ง ํธ๋ฆฌ์ ์ผ์ข
์ด๋ค.(๋ง์ง๋ง์ ์ ์ธํ ๋ชจ๋ ๋
ธ๋์์ ์์๋ค์ด ๊ฝ ์ฑ์์ง ์ด์งํธ๋ฆฌ)
- ์ฌ๋ฌ ๊ฐ ์ค, ์ต๋๊ฐ๊ณผ ์ต์๊ฐ์ ๋น ๋ฅด๊ฒ ์ฐพ์๋ด๋๋ก ๋ง๋ค์ด์ง ์๋ฃ๊ตฌ์กฐ๋ก ๋ฐ์ ๋ ฌ ์ํ์ด๋ค.
- ํ ํธ๋ฆฌ๋ ์ค๋ณต๋ ๊ฐ์ ํ์ฉํ๋ค. (์ด์ง ํ์ ํธ๋ฆฌ๋ ์ค๋ณต๊ฐ ํ์ฉX)
์ฐ์ ์์์ ๊ฐ๋
์ ํ์ ๋์
ํ ์๋ฃ๊ตฌ์กฐ
๋ฐ์ดํฐ๋ค์ด ์ฐ์ ์์๋ฅผ ๊ฐ์ง๊ณ ์์ด ์ฐ์ ์์๊ฐ ๋์ ๋ฐ์ดํฐ๊ฐ ๋จผ์ ๋๊ฐ๋ค
๋ด๋ถ๊ตฌ์กฐ๊ฐ ํ์ผ๋ก ๊ตฌ์ฑ๋์ด ์๊ธฐ์ ์๊ฐ ๋ณต์ก๋๋ O(NLogN)์ด๋ค
์ฐ์ ์์ ํ๋ ๋ฐฐ์ด, ์ฐ๊ฒฐ๋ฆฌ์คํธ, ํ ์ผ๋ก ๊ตฌํ์ด ๊ฐ๋ฅํ๋ค. ์ด ์ค์์ ํ(heap)์ผ๋ก ๊ตฌํํ๋ ๊ฒ์ด ๊ฐ์ฅ ํจ์จ์ ์ด๋ค.
import java.util.PriorityQueue; //import
//intํ priorityQueue ์ ์ธ (์ฐ์ ์์๊ฐ ๋ฎ์ ์ซ์ ์)
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>();
//intํ priorityQueue ์ ์ธ (์ฐ์ ์์๊ฐ ๋์ ์ซ์ ์)
PriorityQueue<Integer> priorityQueue = new PriorityQueue<>(Collections.reverseOrder());
๋ถ๋ชจ ๋
ธ๋์ ํค ๊ฐ์ด ์์ ๋
ธ๋์ ํค ๊ฐ๋ณด๋ค ํฌ๊ฑฐ๋ ๊ฐ์ ์์ ์ด์ง ํธ๋ฆฌ
Key(parent) โฅ Key(child)
๊ฐ์ฅ ํฐ ๊ฐ์ด ๋ฃจํธ๋
ธ๋์ ์์
๋ถ๋ชจ ๋
ธ๋์ ํค ๊ฐ์ด ์์ ๋
ธ๋์ ํค ๊ฐ๋ณด๋ค ์๊ฑฐ๋ ๊ฐ์ ์์ ์ด์ง ํธ๋ฆฌ
Key(parent) โค Key(child)
๊ฐ์ฅ ์์ ๊ฐ์ด ๋ฃจํธ๋
ธ๋์ ์์
ํ์ ์ผ๋ฐ์ ์ผ๋ก ๋ฐฐ์ด๋ก ํํํฉ๋๋ค.
๊ฐ๋ฐ ํธ์์ฑ๊ณผ ๊ฐ๋
์ฑ ๋๋ฌธ์ ๋ฐฐ์ด ์ธ๋ฑ์ค 1๋ถํฐ ์ฌ์ฉํฉ๋๋ค.
๋ฃจํธ ๋ ธ๋์ ์ธ๋ฑ์ค i๊ฐ 1์ธ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ ์์ฑ์ด ์์ต๋๋ค.
- ๋
ธ๋ i์ ๋ถ๋ชจ๋
ธ๋ ์ธ๋ฑ์ค :
[i/2]
- ๋
ธ๋ i์ ์ผ์ชฝ ์์ ๋
ธ๋ ์ธ๋ฑ์ค :
2*i
- ๋
ธ๋ i์ ์ค๋ฅธ์ชฝ ์์ ๋
ธ๋ ์ธ๋ฑ์ค :
2*i + 1
- ์ฐ์ ์์ ํ
- Dijkstra ์๊ณ ๋ฆฌ์ฆ
- ํ ์ ๋ ฌ