μ΅μλΉμ©μ μ₯νΈλ¦¬ (Minimum Spanning Tree)
-
Kruskalμ μκ³ λ¦¬μ¦
- μμ§λ€μ κ°μ€μΉμ μ€λ¦μ°¨μμΌλ‘ μ λ ¬νλ€.
- μμ§λ€μ κ·Έ μμλλ‘ νλμ© μ νν΄ κ°λ€.
λ¨, μ΄λ―Έ μ νλ μμ§λ€κ³Ό μ¬μ΄ν΄(cycle)μ νμ±νλ©΄ μ ννμ§ μλλ€.
- n-1κ°μ μμ§κ° μ νλλ©΄ μ’ λ£νλ€.
μμ κ·Έλνμμ, λͺ¨λ₯Έ μμ§λ€μ μμ κ²λΆν° ν° κ² μμΌλ‘ μ λ ¬ν΄ λμλ€κ³ κ°μ νμ.
(a) : κ°μ₯ κ°μ€μΉ(weight)κ° μμ μμ§(1)λ₯Ό μ ννλ€. => λ΄κ° μ νν μμ§λ€μ cycleμ νμ±νμ§ μλλ€. (μ? μμ§κ° νλλ°μ μ νλμ§ μμμΌλκΉ)
(b) : κ·Έ λ€μμΌλ‘ κ°μ€μΉ(weight)κ° μμ μμ§(2)λ₯Ό μ ννλ€. => cycleμ νμ±νμ§ μλλ€.
(c) : κ·Έ λ€μμΌλ‘ κ°μ€μΉ(weight)κ° μμ μμ§(2)λ₯Ό μ ννλ€. => cycleμ νμ±νμ§ μλλ€.
(bλ c μ€μμ μ΄λκ²μ΄ λ¨Όμ κ° λμ΄λ μκ΄ μλ€.)
... λ°λ³΅
(e) : κ·Έ λ€μμΌλ‘ κ°μ€μΉ(weight)κ° μμ μμ§(6)λ₯Ό μ ννλ€. => cycleμ νμ±νλ€. => μ΄ μμ§λ μ ννμ§ μκ³ λ²λ¦°λ€.
.. κ·Έ λ€μμΌλ‘ κ°μ€μΉκ° μμ μμ§ λμμ cycleμ νμ±νμ§ μλ μμ§λ₯Ό μ ννλ€. (λ°λ³΅)
μ΄μ μ΄ μλ κ·Έλνμμ
(m)κ³Ό (n) κ³Όμ μ ν νμκ° μλ€λ κ²μ μ μ μλ€. (cycleμ νμ±νκΈ° λλ¬Έμ!)
-
μ μμ λ°©λ²μΌλ‘ MST(Minimum Spanning Tree : μ΅μλΉμ©μ μ₯νΈλ¦¬)κ° μ°Ύμμ§λκ°?
- Kruskal μ μκ³ λ¦¬μ¦μ μμμ ν λ¨κ³λ₯Ό μκ°ν΄ 보μ.
- Aλ₯Ό νμ¬κΉμ§ μκ³ λ¦¬μ¦μ΄ μ νν μμ§μ μ§ν©μ΄λΌκ³ νκ³ , Aλ₯Ό ν¬ν¨νλ MSTκ° μ‘΄μ¬νλ€κ³ κ°μ νμ.
(μλμ κ·Έλνμμλ λΉ¨κ°μμΌλ‘ νμν μμ§λ€μ AλΌκ³ κ°μ νμ)
Aλ₯Ό ν¬ν¨νλ MSTκ° μ‘΄μ¬νλ€κ³ κ°μ ν΄ λ³΄μ.
νλ λν±μ΄μ μ΄λ‘ λν±μ΄λ₯Ό crossνλ λΉ¨κ° μμ§κ° μκΈ΄λ€ ν΄λ cycleμ μμ±λμ§ μλλ€. => MSTμ ν보μ΄λ€.
+ cycleμ νμ±νμ§ μλ lightest edge => Kruskalμ μκ³ λ¦¬μ¦μ μν MST μ°ΎκΈ°
-
μ¬μ΄ν΄ κ²μ¬
- μ΄κΈ° μν : μ νλ μμ§ μμ
- κ°κ°μ μ°κ²° μμλ₯Ό νλμ μ§ν©μΌλ‘ νν
μλ₯Ό λ€μ΄ μμ κ·Έλν (e)λ₯Ό 보μ.
{a, b}, {c, e, i, g, h, f}, {d}, {e} μ κ°μ΄ μ§ν©μΌλ‘ ννν μ μλ€.
μ΄μ μ§ν© {c, e, i, g, h, f} μμμ μμ§κ° μ°κ²°λλ©΄ μ¬μ΄ν΄μ΄ νμ±λκ³ ,
μ§ν© {a, b} μ€ μμ νλμ μ§ν© {c, e, i, g, h, f} μμ μμ νλκ° μ°κ²°λλ©΄ μ¬μ΄ν΄μ΄ νμ±λμ§ μλ κ²μ΄λ€.
κ°μ₯ μμ weightμ λ Έλλ₯Ό μ°ΎμΌλ©΄ 1μΈλ°, μ΄λ λ Έλ gμ λ Έλ hλ λ€λ₯Έ μ§ν©μ μνμΌλ―λ‘ {g, h}λ₯Ό λ§λ λ€.
... λ°λ³΅
MST-KRUSKAL(G, w) :
{
A <- ø
for each vertex v ∈ V[G] // κ°κ°μ λ
Έλλ€μ μ μΌν μμλ‘ κ°μ§λ μ§ν©λ€μ λ§λ€μ΄λΌ
do MAKE-SET(v)
sort the edges of E into nondecreasing order by weight w
for each edgit(u, v) ∈ E, taken in nondecreasing order by weight
do if FIND-SET(u) != FIND-SET(v) // FIND-SET(v) : λ
Έλ vκ° μν μ§ν©μ μ°ΎμλΌ
then A <- A ∪ {(u, v)}
UNION(u, v) // uμ vκ° μν λ μ§ν©μ νλλ‘ ν©μΉλ€.
return A
}
'μκ³ λ¦¬μ¦' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
16-1κ°. μ΅λ¨κ²½λ‘ (Shortest Path Problem) (1) (0) | 2021.01.06 |
---|---|
15-4. μ΅μλΉμ©μ μ₯νΈλ¦¬( Minimum Spanning Tree) (0) | 2020.12.17 |
15-1κ°. μ΅μλΉμ©μ μ₯νΈλ¦¬(Minimum spanning tree) (0) | 2020.12.11 |
14-4κ°. DAGμ μμμμ (0) | 2020.12.08 |
14-3κ°. κ·Έλνμμμ DFS (0) | 2020.12.06 |
λκΈ