λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μ•Œκ³ λ¦¬μ¦˜

15-2κ°•. μ΅œμ†ŒλΉ„μš©μ‹ μž₯트리 (Minimum Spanning Tree) (2)

by devshin.kr 2020. 12. 13.
728x90

μ΅œμ†ŒλΉ„μš©μ‹ μž₯트리 (Minimum Spanning Tree)

 

 

  • Kruskal의 μ•Œκ³ λ¦¬μ¦˜

- 에지듀을 κ°€μ€‘μΉ˜μ˜ μ˜€λ¦„μ°¨μˆœμœΌλ‘œ μ •λ ¬ν•œλ‹€.

- 에지듀을 κ·Έ μˆœμ„œλŒ€λ‘œ ν•˜λ‚˜μ”© 선택해 κ°„λ‹€.

   λ‹¨, 이미 μ„ νƒλœ 에지듀과 사이클(cycle)을 ν˜•μ„±ν•˜λ©΄ μ„ νƒν•˜μ§€ μ•ŠλŠ”λ‹€.

- n-1개의 에지가 μ„ νƒλ˜λ©΄ μ’…λ£Œν•œλ‹€.

 

 

Kruskal의 μ•Œκ³ λ¦¬μ¦˜ 1
Kruskal의 μ•Œκ³ λ¦¬μ¦˜ 2
Kruskal의 μ•Œκ³ λ¦¬μ¦˜ 3

 

μœ„μ˜ κ·Έλž˜ν”„μ—μ„œ, λͺ¨λ₯Έ 에지듀을 μž‘μ€ 것뢀터 큰 것 순으둜 μ •λ ¬ν•΄ λ‘μ—ˆλ‹€κ³  κ°€μ •ν•˜μž.

(a) : κ°€μž₯ κ°€μ€‘μΉ˜(weight)κ°€ μž‘μ€ 에지(1)λ₯Ό μ„ νƒν•œλ‹€. => λ‚΄κ°€ μ„ νƒν•œ 에지듀은 cycle을 ν˜•μ„±ν•˜μ§€ μ•ŠλŠ”λ‹€. (μ™œ? 에지가 ν•˜λ‚˜λ°–μ— μ„ νƒλ˜μ§€ μ•Šμ•˜μœΌλ‹ˆκΉŒ)

(b) : κ·Έ λ‹€μŒμœΌλ‘œ κ°€μ€‘μΉ˜(weight)κ°€ μž‘μ€ 에지(2)λ₯Ό μ„ νƒν•œλ‹€. => cycle을 ν˜•μ„±ν•˜μ§€ μ•ŠλŠ”λ‹€.

(c) : κ·Έ λ‹€μŒμœΌλ‘œ κ°€μ€‘μΉ˜(weight)κ°€ μž‘μ€ 에지(2)λ₯Ό μ„ νƒν•œλ‹€. => cycle을 ν˜•μ„±ν•˜μ§€ μ•ŠλŠ”λ‹€.

(bλ‚˜ c μ€‘μ—μ„œ μ–΄λŠκ²ƒμ΄ λ¨Όμ €κ°€ λ˜μ–΄λ„ 상관 μ—†λ‹€.)

... 반볡

(e) : κ·Έ λ‹€μŒμœΌλ‘œ κ°€μ€‘μΉ˜(weight)κ°€ μž‘μ€ 에지(6)λ₯Ό μ„ νƒν•œλ‹€. => cycle을 ν˜•μ„±ν•œλ‹€. => 이 μ—μ§€λŠ” μ„ νƒν•˜μ§€ μ•Šκ³  버린닀.

.. κ·Έ λ‹€μŒμœΌλ‘œ κ°€μ€‘μΉ˜κ°€ μž‘μ€ 에지 λ™μ‹œμ— cycle을 ν˜•μ„±ν•˜μ§€ μ•ŠλŠ” 에지λ₯Ό μ„ νƒν•œλ‹€. (반볡)

 

이제 이 μ•„λž˜ κ·Έλž˜ν”„μ—μ„œ

 

Kruskal의 μ•Œκ³ λ¦¬μ¦˜ 4

(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} μ•ˆμ˜ μ›μ†Œ ν•˜λ‚˜κ°€ μ—°κ²°λ˜λ©΄ 사이클이 ν˜•μ„±λ˜μ§€ μ•ŠλŠ” 것이닀.

 

 

Kruskal's Algorithm : 사이클 검사 λ°©λ²•μ˜ 초기 μƒνƒœ

 

κ°€μž₯ μž‘μ€ 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
}

 

 

 

www.inflearn.com/course/%EC%95%8C%EA%B3%A0%EB%A6%AC%EC%A6%98-%EA%B0%95%EC%A2%8C/lecture/4110?tab=curriculum

 

μ˜λ¦¬ν•œ ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ μ•Œκ³ λ¦¬μ¦˜ κ°•μ’Œ - μΈν”„λŸ°

μ˜λ¦¬ν•˜κ²Œ ν”„λ‘œκ·Έλž˜λ°μ„ ν•  수 있기 μœ„ν•œ κΈ°λ³Έ μ†Œμ–‘μΈ 'μ•Œκ³ λ¦¬μ¦˜' 을 배우고 μ‘μš©ν•˜λŠ” 방법을 λ°°μ›λ‹ˆλ‹€. μ΄ˆκΈ‰ μ•Œκ³ λ¦¬μ¦˜ μ•Œκ³ λ¦¬μ¦˜ 온라인 κ°•μ˜ ν”„λ‘œκ·Έλž˜λ°μ„ μœ„ν•œ μ•Œκ³ λ¦¬μ¦˜ κ°•μ’Œ

www.inflearn.com

 

λŒ“κΈ€