-
Prim์ ์๊ณ ๋ฆฌ์ฆ
- ์์์ ๋ ธ๋๋ฅผ ์ถ๋ฐ๋ ธ๋๋ก ์ ํ
- ์ถ๋ฐ ๋ ธ๋๋ฅผ ํฌํจํ๋ ํธ๋ฆฌ๋ฅผ ์ ์ ํค์ ๊ฐ
(ํฌ๋ฌ์ค์นผ์ ์์ง๋ค์ ๊ฐ์ค์น๊ฐ ์์ ์์๋๋ก ์ ๊ทผํ๋ ๋ฐฉ๋ฒ์ด์๋ค๋ฉด, ํ๋ฆผ์ ์ถ๋ฐ๋ ธ๋๋ถํฐ ์ฐ๊ฒฐ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ค์ ํ์ํ์ฌ ํธ๋ฆฌ๋ฅผ ํค์ด๋ค)
- ๋งค ๋จ๊ณ์์ ์ด๋ฏธ ํธ๋ฆฌ์ ํฌํจ๋ ๋ ธ๋์ ํฌํจ๋์ง ์์ ๋ ธ๋๋ฅผ ์ฐ๊ฒฐํ๋ ์์ง๋ค ์ค ๊ฐ์ฅ ๊ฐ์ค์น๊ฐ ์์ ์์ง๋ฅผ ์ ํ
์์ ๊ทธ๋ํ์์ ์ถ๋ฐ ๋ ธ๋๊ฐ ์ด๋ก์ ๋ ธ๋๋ผ๊ณ ํ๋ฉด, ์ถ๋ฐ ๋ ธ๋์ ์ธ์ ํ ๋ ธ๋๋ค์ A๋ผ ํ๋ฉด, ๊ทธ ๋ถ๋ถํธ๋ฆฌ์ ํฌํจ๋ ๋ ธ๋๋ค์ ์งํฉ์ V of A(๋นจ๊ฐ ๋ ธ๋๋ค)๋ผ ํ์.
(a) : ์ถ๋ฐ๋ ธ๋ a ์์ ์ธ์ ํ ๋ ธ๋ b์ ๋ ธ๋ k ๊ฐ ์๋ค. ๊ฐ์ค์น๊ฐ ์์ ์์ง๋ 4์ด๋ฏ๋ก ๋ ธ๋ b๋ฅผ ์ ํํ๋ค.
(b) : ์ด์ ๋ ธ๋ a ์ ๋ ธ๋ b๋ V of A์ ๋ถ๋ถ์งํฉ์ด ๋์๋ค.
(c) : ๋ ธ๋ a์ ์ธ์ ํ ๋ ธ๋ k์ ๋ ธ๋ b์ ์ธ์ ํ ๋ ธ๋ c๊ฐ ์๋ค. ๊ฐ ์์ง์ ๊ฐ์ค์น๋ ๋ ๋ค 8๋ก ๋์ผํ๋ค.
์ด ๊ฒฝ์ฐ ์ด๋ ํ ๋ ธ๋๋ฅผ ๋จผ์ ์ ํํด๋ ์๊ด์ด ์๋ค. ์์ ์์์๋ ๋ ธ๋ c๋ฅผ ๋จผ์ ์ ํํ๋ค๊ณ ๊ฐ์ ํ์.
์ด์ V of A์ ๋ถ๋ถ์งํฉ์ ๋ ธ๋ a, ๋ ธ๋ b, ๋ ธ๋ c๊ฐ ๋์๋ค.
(d) : ๊ฐ ๋ ธ๋์ ์ธ์ ํ ๋ ธ๋๋ค์ ํ์ํ์ฌ ๊ทธ ์ค ๊ฐ์ฅ ๊ฐ์ค์น๊ฐ ์์ ์์ง๋ฅผ ํ๋ ์ ํํ์. ์ด ๊ฒฝ์ฐ, ๊ฐ์ค์น 2๊ฐ ๊ฐ์ฅ ์์ ์์ง๊ฐ ๋์์ผ๋ฏ๋ก ๋ ธ๋ i๋ฅผ ์ ํํ๋ค.
... ๋ฐ๋ณต
(i) ์ด๋ ๊ฒ ๋ฐ๋ณตํ๋ค ๋ณด๋ฉด ๋ชจ๋ ๋ ธ๋๋ค์ด ๊น๋งฃ๊ฒ ์น ํด์ง๋ค. ํ์์ด ๋๋ฌ๋ค.
-
์ ์ด๋ ๊ฒ ํ๋ฉด MST(Minimum Spanning Tree)๊ฐ ์ฐพ์์ง๋๊ฐ?
- Prim ์ ์๊ณ ๋ฆฌ์ฆ์ ์์์ ํ ๋จ๊ณ๋ฅผ ์๊ฐํด ๋ณด์.
- A๋ฅผ ํ์ฌ๊น์ง ์๊ณ ๋ฆฌ์ฆ์ด ์ ํํ ์์ง์ ์งํฉ์ด๋ผ๊ณ ํ๊ณ , A๋ฅผ ํฌํจํ๋ MST๊ฐ ์กด์ฌํ๋ค๊ณ ๊ฐ์ ํ์.
-
๊ฐ์ค์น๊ฐ ์ต์์ธ ์์ง ์ฐพ๊ธฐ
- V of A : ์ด๋ฏธ ํธ๋ฆฌ์ ํฌํจ๋ ๋ ธ๋๋ค
- V of A์ ์์ง ์ํ์ง ์์ ๊ฐ ๋ ธ๋ v์ ๋ํด์ ๋ค์๊ณผ ๊ฐ์ ๊ฐ์ ์ ์ง
- key(v) : ์ด๋ฏธ V of A์ ์ํ ๋ ธ๋์ ์์ ์ ์ฐ๊ฒฐํ๋ ์์ง๋ค ์ค ๊ฐ์ค์น๊ฐ ์ต์์ธ ์์ง (u, v)์ ๊ฐ์ค์น
- π(v) : ๊ทธ ์์ง (u, v)์ ๋์ u
MST-Prim (G, w, r)
for each u∈V do
key[u] <-∞
π[u] <- NIL
end.
V of A <- {r}
key[r] <- 0
while |V of A| < n do // n-1๋ฒ ๋ฐ๋ณต
find u ∉ V of A with the minimum key value; // ์ต์๊ฐ ์ฐพ๊ธฐ O(n)
V of A <- V of A {u}
for each V ∉ V of A adjacent to u do // degree(u) = O(n)
if key[v] > w(u, v) then
key[v] <- w(u, v)
π[v] <- u
end.
end.
end.
* minimum key
-
Key ๊ฐ์ด ์ต์์ธ ๋ ธ๋ ์ฐพ๊ธฐ
- ์ต์ ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉ
- V-V of A์ ์ํ ๋ ธ๋๋ค์ ์ ์ฅ
- Extract-Min : key ๊ฐ์ด ์ต์์ธ ๋ ธ๋๋ฅผ ์ญ์ ํ๊ณ ๋ฐํ
MST-Prim (G, w, r)
for each u∈V do
key[u] <-∞
π[u] <- NIL
key[r] <- 0
Q <- V[G]
while Q != ๊ณต์งํฉ
do u <- EXTRACT-MIN(Q) // ์ต์๊ฐ ์ฐพ๊ธฐ O(logn)
for each v ∈ Adj[u]
do if v ∈ Q and w(u, v) < key[v]
then [v] <- u
key[v] <- w(u, v) // ์ฐ์ ์์ ํ์์ key๊ฐ decrease : O(logn)
Prim์ ์๊ณ ๋ฆฌ์ฆ : ์๊ฐ๋ณต์ก๋
- ์ด์ง ํ(binary heap)์ ์ฌ์ฉํ์ฌ ์ฐ์ ์์ ํ๋ฅผ ๊ตฌํํ ๊ฒฝ์ฐ
- while loop :
- n๋ฒ์ Extract-Min ์ฐ์ฐ : O(nlogn)
- m๋ฒ์ Decrease-Key ์ฐ์ฐ : O(mlogn)
- ๋ฐ๋ผ์ ์๊ฐ๋ณต์ก๋ : O(nlogn + mlogn) = O(mlogn)
- ์ฐ์ ์์ ํ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋จ์ํ๊ฒ ๊ตฌํํ ๊ฒฝ์ฐ : O(n^2)
- Fibonacci ํ์ ์ฌ์ฉํ์ฌ O(m+nlogn)์ ๊ตฌํ ๊ฐ๋ฅ[Fredman-Tarjan 1984]
'์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
16-3๊ฐ. ์ต๋จ๊ฒฝ๋ก ์๊ณ ๋ฆฌ์ฆ (Shortest Path Algorithm) (3) (0) | 2021.01.10 |
---|---|
16-1๊ฐ. ์ต๋จ๊ฒฝ๋ก (Shortest Path Problem) (1) (0) | 2021.01.06 |
15-2๊ฐ. ์ต์๋น์ฉ์ ์ฅํธ๋ฆฌ (Minimum Spanning Tree) (2) (0) | 2020.12.13 |
15-1๊ฐ. ์ต์๋น์ฉ์ ์ฅํธ๋ฆฌ(Minimum spanning tree) (0) | 2020.12.11 |
14-4๊ฐ. DAG์ ์์์์ (0) | 2020.12.08 |
๋๊ธ