Skip to content

Files

Latest commit

70f2391 ยท Jan 24, 2022

History

History
186 lines (142 loc) ยท 8.76 KB

MinimumSpanningTree.md

File metadata and controls

186 lines (142 loc) ยท 8.76 KB

Minimum Spanning Tree

Minimum Spanning Tree(์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ)

Kruskal MST Algorithm

Prim MST Algorithm

Minimum Spanning Tree (์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ)๋ž€?

๊ทธ๋ž˜ํ”„ G์˜ spanning tree ์ค‘ edge weight์˜ ํ•ฉ์ด ์ตœ์†Œ์ธ spanning tree๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

  • ๊ฐ ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜๊ฐ€ ๋™์ผํ•˜์ง€ ์•Š์„ ๋•Œ ๋‹จ์ˆœํžˆ ๊ฐ€์žฅ ์ ์€ ๊ฐ„์„ ์„ ์‚ฌ์šฉํ•œ๋‹ค๊ณ  ํ•ด์„œ ์ตœ์†Œ ๋น„์šฉ์ด ์–ป์–ด์ง€๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
  • MST๋Š” ๊ฐ„์„ ์— ๊ฐ€์ค‘์น˜๋ฅผ ๊ณ ๋ คํ•˜์—ฌ ์ตœ์†Œ ๋น„์šฉ์˜ spanning tree๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.
  • ์ฆ‰ ๋„คํŠธ์›Œํฌ(๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ„์„ ์— ํ• ๋‹นํ•œ ๊ทธ๋ž˜ํ”„)์— ์žˆ๋Š” ๋ชจ๋“  ์ •์ ๋“ค์„ ๊ฐ€์žฅ ์ ์€ ์ˆ˜์˜ ๊ฐ„์„ ๊ณผ ๋น„์šฉ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

MST ํŠน์ง•

  • ๊ฐ„์„ ์˜ ๊ฐ€์ค‘์น˜์˜ ํ•ฉ์ด ์ตœ์†Œ์—ฌ์•ผ ํ•œ๋‹ค.
  • n๊ฐœ์˜ ์ •์ ์„ ๊ฐ€์ง€๋Š” ๊ทธ๋ž˜ํ”„์— ๋Œ€ํ•ด ๋ฐ˜๋“œ์‹œ (n-1)๊ฐœ์˜ ๊ฐ„์„ ๋งŒ์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค.
  • ์‚ฌ์ดํด์ด ํฌํ•จ๋˜์–ด์„œ๋Š” ์•ˆ๋œ๋‹ค.

spanning tree: ๊ทธ๋ž˜ํ”„ ๋‚ด์— ์žˆ๋Š” ๋ชจ๋“  ์ •์ ์„ ์—ฐ๊ฒฐํ•˜๊ณ  ์‚ฌ์ดํด์ด ์—†๋Š” ๊ทธ๋ž˜ํ”„๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

Kruskal MST Algorithm

ํƒ์š•์ ์ธ ๋ฐฉ๋ฒ•(greedy method)๋ฅผ ์ด์šฉํ•˜์—ฌ ๋„คํŠธ์›Œํฌ(๊ฐ€์ค‘์น˜๋ฅผ ๊ฐ„์„ ์— ํ• ๋‹นํ•œ ๊ทธ๋ž˜ํ”„)์˜ ๋ชจ๋“  ์ •์ ์„ ์ตœ์†Œ ๋น„์šฉ์œผ๋กœ ์—ฐ๊ฒฐํ•˜๋Š” ์ตœ์  ํ•ด๋‹ต์„ ๊ตฌํ•˜๋Š” ๊ฒƒ

  • MST๊ฐ€ 1)์ตœ์†Œ ๋น„์šฉ์˜ ๊ฐ„์„ ์œผ๋กœ ๊ตฌ์„ฑ๋จ 2)์‚ฌ์ดํด์„ ํฌํ•จํ•˜์ง€ ์•Š์Œ ์˜ ์กฐ๊ฑด์— ๊ทผ๊ฑฐํ•˜์—ฌ ๊ฐ ๋‹จ๊ณ„์—์„œ ์‚ฌ์ดํด์„ ์ด๋ฃจ์ง€ ์•Š๋Š” ์ตœ์†Œ ๋น„์šฉ ๊ฐ„์„ ์„ ์„ ํƒํ•œ๋‹ค.
  • ๊ฐ„์„  ์„ ํƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
  • ์ด์ „ ๋‹จ๊ณ„์—์„œ ๋งŒ๋“ค์–ด์ง„ ์‹ ์žฅํŠธ๋ฆฌ์™€๋Š” ์ƒ๊ด€์—†์ด ๋ฌด์กฐ๊ฑด ์ตœ์†Œ ๊ฐ„์„ ๋งŒ์„ ์„ ํƒํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๊ณผ์ •

kruskal

  1. ๊ทธ๋ž˜ํ”„์˜ ๊ฐ„์„ ๋“ค์„ ๊ฐ€์ค‘์น˜์˜ ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค.
  2. ์ •๋ ฌ๋œ ๊ฐ„์„  ๋ฆฌ์ŠคํŠธ์—์„œ ์ˆœ์„œ๋Œ€๋กœ ์‚ฌ์ดํด์„ ํ˜•์„ฑํ•˜์ง€ ์•Š๋Š” ๊ฐ„์„ ์„ ์„ ํƒํ•œ๋‹ค.
    • ์ฆ‰, ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ€์ค‘์น˜๋ฅผ ๋จผ์ € ์„ ํƒํ•œ๋‹ค.
    • ์‚ฌ์ดํด์„ ํ˜•์„ฑํ•˜๋Š” ๊ฐ„์„ ์„ ์ œ์™ธํ•œ๋‹ค.
  3. ํ•ด๋‹น ๊ฐ„์„ ์„ ํ˜„์žฌ์˜ MST์˜ ์ง‘ํ•ฉ์— ์ถ”๊ฐ€ํ•œ๋‹ค.

์ฃผ์˜ ์‚ฌํ•ญ

  • ๋‹ค์Œ ๊ฐ„์„ ์„ ์ด๋ฏธ ์„ ํƒ๋œ ๊ฐ„์„ ๋“ค์˜ ์ง‘ํ•ฉ์— ์ถ”๊ฐ€ํ•  ๋•Œ ์‚ฌ์ดํด์„ ์ƒ์„ฑํ•˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•œ๋‹ค.
  • ์ƒˆ๋กœ์šด ๊ฐ„์„ ์ด ์ด๋ฏธ ๋‹ค๋ฅธ ๊ฒฝ๋กœ์— ์˜ํ•ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ •์ ๋“ค์„ ์—ฐ๊ฒฐํ•  ๋•Œ ์‚ฌ์ดํด์ด ํ˜•์„ฑ๋œ๋‹ค.
  • ์ฆ‰ ์ถ”๊ฐ€ํ•  ์ƒˆ๋กœ์šด ๊ฐ„์„ ์˜ ์–‘ ๋ ์ •์ ์ด ๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•ด ์žˆ์œผ๋ฉด ์‚ฌ์ดํด์ด ํ˜•์„ฑ๋œ๋‹ค.
  • ์‚ฌ์ดํด ์ƒ์„ฑ ์—ฌ๋ถ€๋ฅผ ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•
    • ์ถ”๊ฐ€ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฐ„์„ ์˜ ์–‘ ๋ ์ •์ ์ด ๊ฐ™์€ ์ง‘ํ•ฉ์— ์†ํ•ด ์žˆ๋Š”์ง€๋ฅผ ๋จผ์ € ๊ฒ€์‚ฌํ•ด์•ผ ํ•œ๋‹ค.
    • union-find ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ด์šฉ

Kruskal ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„

  • union-find ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•˜๋ฉด Kruskal ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” ๊ฐ„์„ ๋“ค์„ ์ •๋ ฌํ•˜๋Š” ์‹œ๊ฐ„์— ์ขŒ์šฐ๋œ๋‹ค.
  • ์ฆ‰ ๊ฐ„์„  e๊ฐœ๋ฅผ ํ€ต ์ •๋ ฌ๊ณผ ๊ฐ™์€ ํšจ์œจ์ ์ธ ์•Œ๊ณ ๋ฆฌ์ฆ˜์œผ๋กœ ์ •๋ ฌํ•œ๋‹ค๋ฉด ์‹œ๊ฐ„ ๋ณต์žก๋„๋Š” O(ElogE)๊ฐ€ ๋œ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ •๋ ฌ๋œ ๊ฐ„์„ ์„ ์ˆœํšŒํ•˜๋ฉฐ union-find ์—ฐ์‚ฐ์„ ํ•œ๋ฒˆ์”ฉ ์ˆ˜ํ–‰ํ•œ๋‹ค. O(1)*E
  • ๊ฒฐ๊ณผ์ ์œผ๋กœ O(ElogE + E)

Kruskal Algorithm's code

import sys

v, e = map(int, input().split())
# ๋ถ€๋ชจ ํ…Œ์ด๋ธ” ์ดˆ๊ธฐํ™”
parent = [0] * (v+1)
for i in range(1, v+1):
    parent[i] = i

# find ์—ฐ์‚ฐ
def find_parent(parent, x):
    if parent[x] != x:
        parent[x] = find_parent(parent, parent[x])
    return parent[x]

# union ์—ฐ์‚ฐ
def union_parent(parent, a, b):
    a = find_parent(parent, a)
    b = find_parent(parent, b)
    if a < b:
        parent[b] = a
    else:
        parent[a] = b

# ๊ฐ„์„  ์ •๋ณด ๋‹ด์„ ๋ฆฌ์ŠคํŠธ์™€ ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ ๊ณ„์‚ฐ ๋ณ€์ˆ˜ ์ •์˜
edges = []
total_cost = 0

# ๊ฐ„์„  ์ •๋ณด ์ฃผ์–ด์ง€๊ณ  ๋น„์šฉ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌ
for _ in range(e):
    a, b, cost = map(int, input().split())
    edges.append((cost, a, b))

# ๊ฐ„์„  ์ •๋ณด ๋น„์šฉ ๊ธฐ์ค€์œผ๋กœ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ
edges.sort()

# ๊ฐ„์„  ์ •๋ณด ํ•˜๋‚˜์”ฉ ํ™•์ธํ•˜๋ฉด์„œ ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ˆ˜ํ–‰
for i in range(e):
    cost, a, b = edges[i]
    # find ์—ฐ์‚ฐ ํ›„, ๋ถ€๋ชจ๋…ธ๋“œ ๋‹ค๋ฅด๋ฉด ์‚ฌ์ดํด ๋ฐœ์ƒ X์œผ๋ฏ€๋กœ union ์—ฐ์‚ฐ ์ˆ˜ํ–‰ -> ์ตœ์†Œ ์‹ ์žฅ ํŠธ๋ฆฌ์— ํฌํ•จ!
    if find_parent(parent, a) != find_parent(parent, b):
        union_parent(parent, a, b)
        total_cost += cost

print(total_cost)

Prim MST Algorithm

์‹œ์ž‘ ์ •์ ์—์„œ๋ถ€ํ„ฐ ์ถœ๋ฐœํ•˜์—ฌ ์‹ ์žฅํŠธ๋ฆฌ ์ง‘ํ•ฉ์„ ๋‹จ๊ณ„์ ์œผ๋กœ ํ™•์žฅํ•ด๋‚˜๊ฐ€๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

  • ์ •์  ์„ ํƒ์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‹ค.
  • ์ด์ „ ๋‹จ๊ณ„์—์„œ ๋งŒ๋“ค์–ด์ง„ ์‹ ์žฅ ํŠธ๋ฆฌ๋ฅผ ํ™•์žฅํ•˜๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.

๊ณผ์ •

prim

  1. ์‹œ์ž‘ ๋‹จ๊ณ„์—์„œ๋Š” ์‹œ์ž‘ ์ •์ ๋งŒ์ด MST ์ง‘ํ•ฉ์— ํฌํ•จ๋œ๋‹ค.
  2. ์•ž ๋‹จ๊ณ„์—์„œ ๋งŒ๋“ค์–ด์ง„ MST ์ง‘ํ•ฉ์— ์ธ์ ‘ํ•œ ์ •์ ๋“ค ์ค‘์—์„œ ์ตœ์†Œ ๊ฐ„์„ ์œผ๋กœ ์—ฐ๊ฒฐ๋œ ์ •์ ์„ ์„ ํƒํ•˜์—ฌ ํŠธ๋ฆฌ๋ฅผ ํ™•์žฅํ•œ๋‹ค.
    • ์ฆ‰, ๊ฐ€์žฅ ๋‚ฎ์€ ๊ฐ€์ค‘์น˜๋ฅผ ๋จผ์ € ์„ ํƒํ•œ๋‹ค.
  3. ์œ„์˜ ๊ณผ์ •์„ ํŠธ๋ฆฌ๊ฐ€ (N-1)๊ฐœ์˜ ๊ฐ„์„ ์„ ๊ฐ€์งˆ ๋•Œ๊นŒ์ง€ ๋ฐ˜๋ณตํ•œ๋‹ค.

Prim ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„

  • ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์—์„œ ์‹œ๊ฐ„ ๋ณต์žก๋„์— ๊ฐ€์žฅ ํฐ ์˜ํ–ฅ์„ ๋ฏธ์น˜๋Š” ๊ฒƒ์€ ๊ฐ€์ค‘์น˜๊ฐ€ ๊ฐ€์žฅ ์ž‘์€ ์ •์ ์„ ์ฐพ์•„๋‚ด๋Š” ๊ฒƒ๊ณผ ์ธ์ ‘ํ•œ ์ •์ ์˜ ํƒ์ƒ‰์ด๋‹ค.
  • ๋ชจ๋“  ๋…ธ๋“œ์— ๋Œ€ํ•ด ํƒ์ƒ‰์„ ์ง„ํ–‰ํ•˜๋ฏ€๋กœ O(V)์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์šฐ์„ ์ˆœ์œ„ ํ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งค๋…ธ๋“œ๋งˆ๋‹ค ์ตœ์†Œ ๊ฐ„์„ ์„ ์ฐพ๋Š” ์‹œ๊ฐ„์„ O(logV)์ด๋‹ค. ๋”ฐ๋ผ์„œ ํƒ์ƒ‰๊ณผ์ •์—๋Š” O(VlogV)๊ฐ€ ์†Œ์š”๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๋…ธ๋“œ์˜ ์ธ์ ‘ ๊ฐ„์„ ์„ ์ฐพ๋Š” ์‹œ๊ฐ„์€ ๋ชจ๋“  ๋…ธ๋“œ์˜ ์ฐจ์ˆ˜์™€ ๊ฐ™์œผ๋ฏ€๋กœ O(E)๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๊ฐ ๊ฐ„์„ ์— ๋Œ€ํ•ด ํž™์— ๋„ฃ๋Š” ๊ณผ์ •์ด O(logV)๊ฐ€ ๋˜์–ด ์šฐ์„ ์ˆœ์œ„ ํ ๊ตฌ์„ฑ์— O(ElogV)๊ฐ€ ์†Œ์š”๋œ๋‹ค. ๋”ฐ๋ผ์„œ O(VlogV+ElogV)๋กœ O(ElogV)๊ฐ€ ๋œ๋‹ค. (โˆตE๊ฐ€ ์ผ๋ฐ˜์ ์œผ๋กœ V๋ณด๋‹ค ํฌ๊ธฐ ๋•Œ๋ฌธ)
  • ๋งŒ์•ฝ ์šฐ์„ ์ˆœ์œ„ ํ๊ฐ€ ์•„๋‹ˆ๋ผ ๋ฐฐ์—ด๋กœ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด ๊ฐ ์ •์ ์— ์ตœ์†Œ ๊ฐ„์„ ์„ ๊ฐ–๋Š” ์ •์  ํƒ์ƒ‰์„ ๋งค๋ฒˆ ์ •์ ๋งˆ๋‹ค ์ˆ˜ํ–‰ํ•˜๋ฏ€๋กœ O(V^2)๊ฐ€๋˜๊ณ  ํƒ์ƒ‰ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๊ฐ ์ •์ ์˜ ์ตœ์†Œ ๋น„์šฉ ์—ฐ๊ฒฐ ์ •์  ํƒ์ƒ‰์—๋Š” O(1)์ด ์†Œ์š”๋œ๋‹ค. ๋”ฐ๋ผ์„œ ์‹œ๊ฐ„๋ณต์žก๋„๋Š” O(V^2)์ด๋‹ค.

Prim Algorithm's code

import heapq
import collections
import sys
sys.setrecursionlimit(10**6)
input = sys.stdin.readline

n, m = map(int,input().split()) # ๋…ธ๋“œ ์ˆ˜, ๊ฐ„์„  ์ˆ˜
graph = collections.defaultdict(list) # ๋นˆ ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
visited = [0] * (n+1) # ๋…ธ๋“œ์˜ ๋ฐฉ๋ฌธ ์ •๋ณด ์ดˆ๊ธฐํ™”

# ๋ฌด๋ฐฉํ–ฅ ๊ทธ๋ž˜ํ”„ ์ƒ์„ฑ
for i in range(m): # ๊ฐ„์„ฑ ์ •๋ณด ์ž…๋ ฅ ๋ฐ›๊ธฐ
    u, v, weight = map(int,input().split())
    graph[u].append([weight, u, v])
    graph[v].append([weight, v, u])


# ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜
def prim(graph, start_node):
    visited[start_node] = 1 # ๋ฐฉ๋ฌธ ๊ฐฑ์‹ 
    candidate = graph[start_node] # ์ธ์ ‘ ๊ฐ„์„  ์ถ”์ถœ
    heapq.heapify(candidate) # ์šฐ์„ ์ˆœ์œ„ ํ ์ƒ์„ฑ
    mst = [] # mst
    total_weight = 0 # ์ „์ฒด ๊ฐ€์ค‘์น˜

    while candidate:
        weight, u, v = heapq.heappop(candidate) # ๊ฐ€์ค‘์น˜๊ฐ€ ๊ฐ€์žฅ ์ ์€ ๊ฐ„์„  ์ถ”์ถœ
        if visited[v] == 0: # ๋ฐฉ๋ฌธํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด
            visited[v] = 1 # ๋ฐฉ๋ฌธ ๊ฐฑ์‹ 
            mst.append((u,v)) # mst ์‚ฝ์ž…
            total_weight += weight # ์ „์ฒด ๊ฐ€์ค‘์น˜ ๊ฐฑ์‹ 

            for edge in graph[v]: # ๋‹ค์Œ ์ธ์ ‘ ๊ฐ„์„  ํƒ์ƒ‰
                if visited[edge[2]] == 0: # ๋ฐฉ๋ฌธํ•œ ๋…ธ๋“œ๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด, (์ˆœํ™˜ ๋ฐฉ์ง€)
                    heapq.heappush(candidate, edge) # ์šฐ์„ ์ˆœ์œ„ ํ์— edge ์‚ฝ์ž…

    return total_weight

print(prim(graph,1))

Kruskal VS Prim

  • ํ”„๋ฆผ์€ ์ •์  ์œ„์ฃผ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜, ํฌ๋ฃจ์Šค์นผ์€ ๊ฐ„์„  ์œ„์ฃผ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜
  • ํ”„๋ฆผ์€ ์‹œ์ž‘์ ์„ ์ •ํ•˜๊ณ , ์‹œ์ž‘์ ์—์„œ ๊ฐ€๊นŒ์šด ์ •์ ์„ ์„ ํƒํ•˜๋ฉด์„œ ํŠธ๋ฆฌ๋ฅด ๊ตฌ์„ฑ ํ•˜๋ฏ€๋กœ ๊ทธ ๊ณผ์ •์—์„œ ์‚ฌ์ดํด์„ ์ด๋ฃจ์ง€ ์•Š์ง€๋งŒ ํฌ๋ฃจ์Šค์นผ์€ ์‹œ์ž‘์ ์„ ๋”ฐ๋กœ ์ •ํ•˜์ง€ ์•Š๊ณ  ์ตœ์†Œ ๋น„์šฉ์˜ ๊ฐ„์„ ์„ ์ฐจ๋ก€๋กœ ๋Œ€์ž… ํ•˜๋ฉด์„œ ํŠธ๋ฆฌ๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์ดํด์ด ์ด๋ฃจ์–ด์ง€๋Š” ํ•ญ์ƒ ํ™•์ธ ํ•ด์•ผํ•œ๋‹ค.
  • ํ”„๋ฆผ์˜ ๊ฒฝ์šฐ ์ตœ์†Œ ๊ฑฐ๋ฆฌ์˜ ์ •์ ์„ ์ฐพ๋Š” ๋ถ€๋ถ„์—์„œ ์ž๋ฃŒ๊ตฌ์กฐ์˜ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฐ›๋Š”๋‹ค.
  • ํฌ๋ฃจ์Šค์นผ์€ ๊ฐ„์„ ์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•˜๋Š” ๊ณผ์ •์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฐ๋‹ค.
  • ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ž‘์€ ๊ฒฝ์šฐ์—๋Š” ํฌ๋ฃจ์Šค์นผ, ๊ฐ„์„ ์˜ ๊ฐœ์ˆ˜๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ์—๋Š” ํ”„๋ฆผ.

์ฐธ๊ณ 

kruskal code

prim code

kruskal

prim

union-find

Q&A


  1. ์ตœ์†Œ ์ŠคํŒจ๋‹ ํŠธ๋ฆฌ์— ๋Œ€ํ•ด์„œ ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  1. ํฌ๋ฃจ์Šค์นผ๊ณผ ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์‹œ๊ฐ„๋ณต์žก๋„์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.
  1. ํฌ๋ฃจ์Šค์นผ ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ํ”„๋ฆผ ์•Œ๊ณ ๋ฆฌ์ฆ˜์˜ ์ฐจ์ด์ ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ด์ฃผ์„ธ์š”.