개념 강의
최소 신장 트리(MST), Prim, Kruskal, 최단 경로, Bellman-Ford

최소 신장 트리와 최단 경로

1타 강사식 학습 동선

직관 → 조작 → 예시 → 함정 → 답안

MST(minimum spanning tree, minimaler Spannbaum)와 shortest paths(kürzeste Wege)는 둘 다 weighted graph를 보지만 질문이 다릅니다. MST는 source 없이 모든 vertex를 하나의 tree로 연결하면서 total edge weight를 최소...

\(가중 그래프(\text{gewichteter} \text{Graph}): G=(V,E), w:E\rightarrow R\)가중 그래프(gewichteter Graph): G=(V,E), w:E→R최소 신장 트리(MST, minimum spanning tree, minimaler Spannbaum)\(신장 트리: 모든 정점 포함, 연결, 무순환, |E_{T}|=|V|-1\)신장 트리: 모든 정점 포함, 연결, 무순환, |Eₜ|=|V|-1절단(cut), 가벼운 간선(light edge), 안전한 간선(safe edge)Kruskal: 정렬된 간선, 서로소 집합, 순환 간선 건너뛰기
01 직관이 개념이 왜 필요한지 한 문장으로 잡기
02 손풀이그래프, 트리, 표, 문자열을 직접 움직이며 확인하기
03 단계별 예제시험 답안처럼 조건과 결론을 연결하기
04 함정 점검자주 틀리는 조건과 반례를 먼저 차단하기
첫 직관

최소 신장 트리와 최단 경로는 같은 그래프를 보지만 정답의 의미가 다릅니다

시험에서 가중 그래프(weighted graph, gewichteter Graph)가 나오면 많은 학생이 바로 Dijkstra, Kruskal, Prim 중 하나를 떠올립니다. 그러나 먼저 물어야 할 질문은 알고리즘 이름이 아니라 목적함수입니다. 최소 신장 트리(MST, minimaler Spannbaum)는 출발점 없이 모든 정점(vertex, Knoten)을 연결하는 트리의 전체 간선 가중치(Gewicht)를 최소화합니다. 최단 경로(shortest path, kürzester Weg)는 출발점 s에서 어떤 정점 v까지의 경로 가중치를 최소화합니다. 따라서 MST는 네트워크 전체 공사비 문제이고, 최단 경로는 한 출발점에서의 내비게이션 문제입니다.

이 차이는 단순한 말장난이 아닙니다. MST 안에서 두 정점을 잇는 경로가 원래 그래프의 최단 경로일 필요는 없습니다. 반대로 출발점에서 각 정점으로 가는 최단 경로 트리가 전체 간선 가중치가 최소인 신장 트리일 필요도 없습니다. AUD 시험의 객관식 함정은 이 둘의 용어를 일부러 비슷하게 놓습니다. key[v], dist[v], pred[v], set(v)가 모두 비슷해 보이지만 의미는 서로 다릅니다. 이 페이지의 목표는 네 알고리즘 이름을 외우는 것이 아니라, 문제 문장을 보고 어떤 최적화 문제인지 즉시 분리하고 중간표를 실수 없이 채우는 것입니다.

MST 질문

연결된 무방향 가중 그래프에서 모든 정점을 포함하고 순환이 없는 신장 트리 \(T=(V,E_T)\)T=(V,Eₜ)를 고르되 \(w(T)=\sum_{e\in E_T}w(e)\)w(T)=Σₑ∈Eₜ w(e)를 최소화합니다. 강의 06의 82~92쪽은 신장 트리, 안전한 간선(safe edge), 절단 \((S,V\setminus S)\)(S, V−S), 가벼운 간선(light edge)을 정의합니다.

최단 경로 질문

출발점 s에서 각 정점 v까지의 최소 경로 가중치 shortest(s,v)를 구합니다. Dijkstra와 Bellman-Ford는 완화(relaxation) 연산 relax(u,v)dist[v] 후보를 줄입니다.

시험 신호

spanning tree, total weight, cut, cycle, set(u)가 보이면 MST입니다. source, dist, relax, negative edge, negative cycle이 보이면 최단 경로 문제입니다.

핵심 대비

Prim도 Dijkstra도 최소값 추출(extract-min)을 사용하지만, Prim은 현재 트리에 붙이는 경계 간선 중 가장 싼 것을 고르고 Dijkstra는 출발점에서 온 전체 경로 거리의 잠정 최솟값을 고릅니다.

단계별 상호작용 추적

MST와 최단 경로 추적 실습

두 사고 모형을 분리하세요. MST는 전체 연결 구조를 저렴하게 확장하고, 최단 경로는 하나의 출발점에서 거리를 완화합니다.

선수 개념

선수개념과 어휘 지도

아래 단어를 독일어/영어와 함께 말할 수 있으면 그래프 알고리즘 답안의 절반은 안정됩니다.

용어의미시험에서 확인할 점
그래프(Graph) \(G=(V,E)\)G=(V,E)V는 정점(Knoten) 집합, E는 간선(Kante) 집합입니다.방향 그래프인지 무방향 그래프인지 먼저 봅니다. 기본 MST는 연결된 무방향 그래프를 대상으로 합니다.
가중치(Weight) w(e)간선 비용(Gewicht)입니다. MST는 간선들의 총합, 최단 경로는 경로 위 간선들의 합을 봅니다.음수 가중치가 있으면 Dijkstra는 사용할 수 없습니다. MST 알고리즘은 음수 간선도 처리할 수 있습니다.
트리(Tree, Baum)연결되어 있고 순환이 없는 그래프입니다. 정점이 |V|개인 트리는 간선이 |V|-1개입니다.Kruskal에서 간선을 |V|-1개 골랐다면 멈출 수 있습니다.
신장 트리(Spanning tree, Spannbaum)원래 그래프의 모든 정점을 포함하는 트리입니다.일부 정점만 연결하면 MST 후보가 아닙니다.
절단(Cut, Schnitt)정점 집합을 SV-S로 나눈 것입니다.절단이 현재 선택한 간선 집합 A를 존중한다는 말은 A의 간선이 그 절단을 건너지 않는다는 뜻입니다.
가벼운 간선(Light edge)어떤 절단을 건너는 간선 중 가중치가 최소인 간선입니다.강의 06의 핵심 정리는 “가벼운 간선은 안전하다”입니다.
안전한 간선(Safe edge)A ∪ {e}가 여전히 어떤 MST의 부분집합이 되게 하는 간선입니다.일반 MST 정확성 증명은 매번 안전한 간선만 추가한다는 불변식을 씁니다.
완화(Relaxation)\(v.d > u.d + w(u,v)\)v.d > u.d + w(u,v)이면 v.dv.pred를 갱신합니다.Dijkstra와 Bellman-Ford의 공통 기본 동작입니다.
음수 순환(Negative cycle)출발점에서 도달할 수 있고 전체 가중치가 음수인 순환입니다.도달 가능한 음수 순환이 있으면 유한한 최단 거리가 잘 정의되지 않습니다.
기호와 공식

기호를 문제 유형별로 고정하기

비슷해 보이는 표기들을 한 줄 의미로 분리해 두면 Prim과 Dijkstra를 섞지 않습니다.

가중 그래프

\[G=(V,E),\quad w:E \to \mathbb{R}\]G=(V,E),\quad w:E \to \mathbb{R}

V는 정점(Knoten), E는 간선(Kanten), w(e)는 간선 가중치(Gewicht)입니다.

MST 목적함수

\[\min\; w(T)=\sum_{e \in E_{T}} w(e)\]\min\; w(T)=Σ[e \in Eₜ] w(e)

\(T=(V,E_T)\)T=(V,Eₜ)는 모든 정점을 포함하고 순환이 없는 신장 트리입니다. 반드시 \(|E_T|=|V|-1\)|Eₜ|=|V|−1입니다.

최단 경로 목적함수

\[\text{shortest}(s,v)=\min\{w(p): p\text{는 }s\text{에서 }v\text{로 가는 경로}\}\]shortest(s,v)=\min\{w(p): p\text{는 }s\text{에서 }v\text{로 가는 경로}\}

s는 출발점이고 v는 도착점입니다. 경로 전체의 간선 가중치 합을 최소화합니다.

완화(Relaxation)

\[v.d > u.d + w(u,v) \;\Longrightarrow\; v.d := u.d + w(u,v),\; v.\text{pred} := u\]v.d > u.d + w(u,v) \;\Longrightarrow\; v.d := u.d + w(u,v),\; v.pred := u

현재 알고 있는 v까지의 최적 상한을 u를 거쳐 더 낮출 수 있는지 검사합니다.

Kruskal 선택 규칙

\[\text{set}(u) \ne \text{set}(v) \;\Longleftrightarrow\; \{u,v\}\text{를 추가}\]set(u) \ne set(v) \;\Longleftrightarrow\; \{u,v\}\text{를 추가}

서로 다른 연결 성분을 잇는 간선만 추가합니다. 같은 연결 성분이면 순환을 만들기 때문에 건너뜁니다.

Prim의 key

\[\text{key}[v]=\text{현재 트리에서 }v\text{를 잇는 가장 싼 간선의 가중치}\]key[v]=\text{현재 트리에서 }v\text{를 잇는 가장 싼 간선의 가중치}

key[v]는 출발점에서의 거리가 아니라 현재 MST 부분 트리 밖의 정점 v를 붙이는 간선 하나의 비용입니다.

Dijkstra의 전제조건

\[\forall e \in E:\quad w(e) \ge 0\]\forall e \in E:\quad w(e) \ge 0

가중치가 0인 간선은 허용됩니다. 음수 간선이 있으면 최소값 추출 뒤의 확정성 증명이 깨질 수 있습니다.

Bellman-Ford 반복 횟수

\[|V|-1\text{회 반복}:\quad \text{모든 간선을 완화}\]|V|-1\text{회 반복}:\quad \text{모든 간선을 완화}

음수 순환을 쓰지 않는 단순 최단 경로는 간선이 최대 |V|-1개입니다. 그 뒤에도 완화가 가능하면 도달 가능한 음수 순환의 신호입니다.

전체 개념 강의

1. MST: 전체 연결망의 총비용을 최소화한다

강의 06의 82~84쪽 정의를 한국어로 풀면 이렇습니다. 입력은 연결된 무방향 가중 그래프 \(G=(V,E)\)G=(V,E)와 가중치 함수 \(w:E\to\mathbb{R}\)w:E→ℝ입니다. 부분 그래프 \(T=(V,E_T)\)T=(V,Eₜ)가 신장 트리가 되려면 모든 정점을 포함하고, 연결되어 있으며, 순환이 없어야 합니다. 그중 \(w(T)=\sum_{\{u,v\}\in E_T}w(u,v)\)w(T)=Σ{u,v}∈Eₜ w(u,v)가 모든 신장 트리 중 최소인 것이 최소 신장 트리(MST, minimaler Spannbaum)입니다.

여기서 출발점이라는 말이 나오지 않는다는 점이 중요합니다. MST는 어느 한 정점에서 출발하는 문제가 아닙니다. 예를 들어 회사 지점 전체를 케이블로 연결해야 한다면, 한 지점에서 다른 지점까지의 개별 이동 경로가 조금 길어져도 전체 설치비가 최소이면 좋은 해입니다. 그래서 MST의 간선 집합은 전체 네트워크 설계이고, 최단 경로의 선행자 트리는 출발점 기준 경로 지도입니다.

트리의 기본 성질도 시험에서 자주 쓰입니다. \(n=|V|\)n=|V|인 신장 트리는 간선이 정확히 n-1개입니다. Kruskal 표를 채울 때 간선 n-1개가 선택되면 신장 트리가 완성됩니다. 선택한 간선이 이미 같은 연결 성분 안의 두 정점을 잇는다면 새 연결을 만들지 않고 순환만 만들기 때문에 MST 후보에서 제외합니다.

전체 개념 강의

2. 안전한 간선과 절단 속성: MST 탐욕법이 맞는 이유

강의 06의 85~91쪽에서 설명하는 일반 MST 아이디어는 \(A=\text{empty}\)A=empty에서 시작해 A가 신장 트리가 될 때까지 안전한 간선(safe edge)을 하나씩 추가하는 것입니다. 안전한 간선이란 A ∪ {e}가 여전히 어떤 MST의 부분집합이 되게 하는 간선입니다. 즉 지금 고른 간선이 나중에 최적해로 완성될 수 있어야 합니다.

절단 속성(cut property)은 안전한 간선을 찾는 대표 도구입니다. 절단 (S,V-S)가 현재 선택한 간선 집합 A를 존중한다는 것은 A의 어떤 간선도 그 절단을 건너지 않는다는 뜻입니다. 그 절단을 건너는 간선 중 가장 가벼운 간선(light edge)은 A에 대해 안전합니다. 증명 직관은 교환 논증(exchange argument)입니다. 어떤 MST TA를 포함한다고 합시다. 우리가 고른 가벼운 간선 {u,v}가 이미 T에 있으면 끝입니다. 없다면 T에서 u에서 v로 가는 경로에는 같은 절단을 건너는 다른 간선 {x,y}가 있습니다. {u,v}가 더 가벼우므로 \(w(u,v) \le w(x,y)\)w(u,v) ≤ w(x,y)입니다. 그러면 T - {x,y} + {u,v}도 신장 트리이며 가중치가 커지지 않습니다. 따라서 새 간선을 포함하는 MST가 존재합니다.

이 증명 직관을 말할 수 있으면 Kruskal과 Prim의 정확성이 한 문장으로 정리됩니다. Kruskal이 고르는 간선도 어떤 연결 성분 절단의 가벼운 간선이고, Prim이 고르는 간선도 현재 트리와 바깥 정점 사이 절단의 가벼운 간선입니다. 탐욕 선택이 단순히 “작아 보여서” 맞는 것이 아니라, 절단 속성 때문에 안전한 것입니다.

전체 개념 강의

3. Kruskal: 간선을 가벼운 순서로 보며 순환을 피합니다

Kruskal(Kruskal-Algorithmus)은 강의 06의 93~106쪽과 Sheet10의 표 문제에서 중요합니다. 절차는 네 줄입니다. 첫째, \(A=\text{empty}\)A=empty입니다. 둘째, 모든 정점을 원소 하나짜리 집합으로 둡니다. 셋째, 간선을 가중치가 작아지지 않는 순서로 정렬합니다. 넷째, 그 순서로 간선 {u,v}를 보면서 \(\text{set}(u) \ne \text{set}(v)\)set(u) != set(v)이면 간선을 추가하고 두 집합을 합칩니다. \(\text{set}(u)=\text{set}(v)\)set(u)==set(v)이면 이미 같은 연결 성분 안에 있으므로 그 간선은 순환을 만들고 건너뜁니다.

Sheet10 유형의 표에서는 Dazu?set(a), set(b), ... 열을 함께 갱신합니다. 선택하지 않는 간선을 만났을 때도 집합 열은 직전 상태와 같아야 합니다. 문제 지시가 \(=\)=를 사용하라고 하면 변하지 않은 칸에는 \(=\)=를 넣습니다. 간선 가중치가 같다면 문제에서 준 순서나 표의 순서를 따릅니다. 같은 가중치의 처리 순서에 따라 서로 다른 MST가 나올 수 있지만 결과는 모두 MST입니다. MST가 유일하다고 말하려면 추가 조건이 필요합니다.

강의 06의 106쪽에서 기억할 실행 시간 핵심은 간선 정렬이 지배한다는 점입니다. 효율적인 서로소 집합 자료구조를 쓰면 \(O(|E| \log |E|)\)O(|E| log |E|)이며, 단순 그래프에서는 \(\log |E| = \Theta(\log |V|)\)log |E| = Θ(log |V|)이므로 \(O(|E| \log |V|)\)O(|E| log |V|)로도 씁니다. 시험에서는 우선순위 큐나 서로소 집합 구현이 따로 주어졌는지 확인하세요.

전체 개념 강의

4. Prim: 하나의 연결 트리를 경계 간선으로 확장합니다

Prim(Prim-Algorithmus)은 Kruskal처럼 숲을 만들지 않습니다. 강의 06의 108쪽 이후 의사코드는 루트 r에서 시작해 하나의 연결된 부분 트리를 키웁니다. 모든 정점에 \(\text{key}=\infty\)key=∞, \(\text{pred}=\text{NIL}\)pred=NIL을 두고, 루트에는 먼저 뽑히도록 작은 키를 줍니다. 그 뒤 Q에서 키가 가장 작은 정점 u를 꺼내고, u와 인접한 정점 v가 아직 Q 안에 있으며 \(w(\{u,v\}) < v.\text{key}\)w({u,v}) < v.key이면 v.keyv.pred를 갱신합니다.

가장 흔한 실수는 key[v]를 출발점에서 v까지의 거리라고 생각하는 것입니다. Prim의 key[v]는 현재 트리에 v를 붙이는 간선 하나의 비용입니다. 예를 들어 루트에서 멀리 떨어진 정점이라도 현재 트리의 어느 정점과 가중치 1인 간선으로 연결되면 키는 1입니다. Dijkstra는 출발점에서 누적한 거리를 봅니다. 이 차이가 객관식에서 자주 출제됩니다.

Prim의 정확성도 절단 속성으로 증명합니다. 현재 트리의 정점 집합과 아직 바깥에 있는 정점 집합이 절단을 만들고, key가 가장 작은 정점을 뽑는 것은 그 절단을 건너는 가벼운 간선을 선택하는 것입니다. 따라서 안전한 간선입니다. Prim은 MST 알고리즘이므로 기본 전제는 연결된 무방향 그래프입니다.

전체 개념 강의

5. 최단 경로: dist는 현재까지 발견한 최적 상한입니다

최단 경로 알고리즘의 중심은 dist[v] 또는 v.d입니다. 이것은 지금까지 알고 있는 출발점 s에서 v까지의 최적 상한입니다. 처음에는 \(s.d=0\)s.d=0, 나머지는 입니다. 어떤 간선 (u,v)를 통해 u.d + w(u,v)가 현재 v.d보다 작으면 더 좋은 경로를 찾은 것이므로 v.dv.pred를 바꿉니다. 이것이 완화(Relaxation)입니다.

완화는 “간선을 선택한다”와 다릅니다. MST에서는 간선을 트리에 넣을지 결정합니다. 최단 경로에서는 간선을 보고 거리 추정값을 낮출 수 있는지만 봅니다. pred[v]는 현재 최적 경로에서 v 바로 앞 정점을 가리키며, 모든 완화가 끝난 뒤 선행자 포인터가 최단 경로 트리 또는 숲을 이룹니다. 도달할 수 없는 정점은 \(\text{dist}=\infty\)dist=∞, \(\text{pred}=\text{NIL}\)pred=NIL로 남습니다.

BFS도 가중치가 없는 그래프에서 최단 경로를 구한다는 점을 기억하세요. 강의 06의 앞부분은 BFS를 distpred로 설명합니다. 가중 최단 경로에서는 간선 수가 아니라 가중치 합을 보므로 Dijkstra나 Bellman-Ford가 등장합니다.

전체 개념 강의

6. Dijkstra: 최소 거리 추출값이 최종값이 되려면 음수가 아닌 가중치가 필요합니다

Dijkstra(Dijkstra-Algorithmus)는 source s에서 시작합니다. initSSSP 뒤 모든 vertex를 priority queue Q에 넣고, 매번 dist가 가장 작은 vertex u를 extract합니다. 그 순간 \(u.\text{dist} = \text{shortest}(s,u)\)u.dist = shortest(s,u)라고 확정(finalize)하고, u의 outgoing edge를 relax합니다. Lecture 06 pages 161-165의 correctness proof는 이 finality invariant를 증명합니다.

왜 nonnegative weight가 필요할까요? 아직 queue 밖에 남아 있는 vertex를 거쳐 나중에 돌아오는 path가 현재 뽑힌 u보다 갑자기 더 싸질 수 없어야 하기 때문입니다. 모든 edge가 0 이상이면, 이미 가장 작은 tentative distance를 가진 u를 뽑은 뒤에 어떤 미처리 vertex를 경유해도 path weight가 줄어드는 반전이 생기지 않습니다. Lecture 06 pages 166-172는 negative edge counterexample을 보여 줍니다. 처음에는 direct path가 좋아 보이지만, 나중에 negative edge를 포함한 우회 path가 더 싸져서 이미 확정한 vertex를 고쳐야 하는 상황이 생깁니다.

MC에서 두 문장을 분리해야 합니다. Dijkstra는 DAG에서만 동작하는 알고리즘이 아닙니다. cycle이 있어도 edge weight가 nonnegative이면 됩니다. 그리고 0-weight edge는 허용됩니다. 조건은 \(w(e) \ge 0\)w(e) ≥ 0이지 \(w(e) > 0\)w(e) > 0가 아닙니다. 단, extracted order가 tie일 때는 여러 올바른 predecessor tree가 가능할 수 있습니다.

전체 개념 강의

7. Bellman-Ford: 모든 간선을 반복해서 완화하고 음수 순환을 감지합니다

Bellman-Ford는 Dijkstra보다 느리지만 negative edge를 허용합니다. 핵심 아이디어는 shortest simple path가 negative cycle 없이 최대 |V|-1개의 edge만 가질 수 있다는 사실입니다. 그래서 모든 edge를 한 번 relax하면 edge 1개짜리 shortest 후보가 반영되고, 두 번 반복하면 edge 2개짜리 후보가 반영되는 식으로 생각할 수 있습니다. |V|-1 rounds 뒤에는 모든 simple shortest path 후보가 반영되어야 합니다.

그 뒤에도 어떤 edge (u,v)\(v.d > u.d + w(u,v)\)v.d > u.d + w(u,v)를 만족한다면, 더 짧은 walk가 계속 생기는 것입니다. 이는 source에서 reachable한 negative cycle이 있음을 의미합니다. 이때는 "최단거리 값"을 유한한 숫자로 반환하면 안 됩니다. cycle을 더 돌수록 weight를 계속 줄일 수 있기 때문입니다.

Undirected graph의 negative edge caveat도 중요합니다. Lecture 06 page 174는 undirected edge를 두 directed arcs로 보는 표현에서 negative undirected edge가 바로 negative cycle을 만든다고 설명합니다. 따라서 undirected graph에서 negative weight가 보이면 Bellman-Ford를 무조건 편하게 쓰면 된다고 말하지 말고, 문제의 graph model과 negative cycle 의미를 확인해야 합니다.

풀이 예제 1

같은 그래프에서 MST와 최단 경로가 다른 간선을 고르는 예

그래프의 정점은 A,B,C,D이고 무방향 간선은 \(\text{AB}=1\)AB=1, \(\text{BC}=1\)BC=1, \(\text{CD}=1\)CD=1, \(\text{AD}=2\)AD=2, \(\text{AC}=3\)AC=3이라고 하겠습니다.

질문계산결론
Kruskal로 구한 MST가중치 순서로 AB, BC, CD를 먼저 봅니다. 세 간선은 순환 없이 네 정점을 모두 연결합니다. 간선이 \(|V|-1=3\)|V|-1=3개이므로 멈춥니다.\(T=\{\text{AB},\text{BC},\text{CD}\}\)T={AB,BC,CD}, \(w(T)=3\)w(T)=3입니다.
A에서 D까지의 최단 경로직접 간선 AD의 비용은 2입니다. MST 경로 A-B-C-D의 비용은 \(1+1+1=3\)1+1+1=3이고, A-C-D\(3+1=4\)3+1=4입니다.\(\text{shortest}(A,D)=2\)shortest(A,D)=2이며 AD를 사용합니다.
시험에서 배울 점MST는 전체 트리 비용을 3으로 최소화했지만 그 트리 안의 A-D 경로 비용은 3입니다. 원래 그래프의 최단 A-D 경로는 MST 밖의 간선 AD를 씁니다.“MST 안의 경로는 최단 경로다”라는 명제는 거짓입니다.
풀이 예제 2

Kruskal 표를 손으로 채우는 방법

Sheet10의 Kruskal table 유형은 알고리즘을 이해했는지와 표를 성실히 갱신하는지를 같이 봅니다. 아래는 간단한 예입니다. Vertices a,b,c,d, edges ab:1, bc:2, ac:3, cd:4, bd:5.

간선추가?이유처리 후 연결 성분
{a,b}:1예(ja)\(\text{set}(a)=\{a\}\)set(a)={a}, \(\text{set}(b)=\{b\}\)set(b)={b}라서 서로 다릅니다.{a,b}, {c}, {d}
{b,c}:2예(ja)b{a,b}에 있고 c는 원소 하나짜리 집합입니다.{a,b,c}, {d}
{a,c}:3아니요(nein)ac가 이미 같은 연결 성분입니다. 추가하면 순환 a-b-c-a가 생깁니다.변화 없음.
{c,d}:4예(ja)서로 다른 연결 성분을 연결합니다.{a,b,c,d}. 선택한 간선 3개로 완성됩니다.

답안 습관: edge를 "선택/비선택"으로 끝내지 말고, 비선택이면 \(\text{set}(u)=\text{set}(v)\)set(u)==set(v) 또는 cycle 발생을 이유로 말합니다. 선택이면 union 후 모든 관련 set columns가 같은 component를 가리키게 갱신합니다.

풀이 예제 3

Dijkstra와 Bellman-Ford의 relaxation 감각 비교

Directed graph에서 source는 s이고 edges는 \(s\rightarrow a:2\)s→a:2, \(s\rightarrow b:5\)s→b:5, \(a\rightarrow b:1\)a→b:1, \(b\rightarrow c:2\)b→c:2, \(a\rightarrow c:6\)a→c:6라고 합시다. 모든 weight가 nonnegative이므로 Dijkstra를 쓸 수 있습니다.

단계Dijkstra 상태의미
초기화\(d[s]=0\)d[s]=0, 나머지는 출발점만 확실합니다.
s 추출\(s\rightarrow a\)s→a 완화: \(d[a]=2\)d[a]=2; \(s\rightarrow b\)s→b 완화: \(d[b]=5\)d[b]=5현재 후보는 a가 가장 작습니다.
a 추출\(a\rightarrow b\)a→b 완화: \(d[b]=3\)d[b]=3; \(a\rightarrow c\)a→c 완화: \(d[c]=8\)d[c]=8b의 선행자가 s에서 a로 바뀝니다.
b 추출\(b\rightarrow c\)b→c 완화: \(d[c]=5\)d[c]=5c의 최적 경로는 s-a-b-c입니다.
최종 상태최종 거리: \(d[a]=2\)d[a]=2, \(d[b]=3\)d[b]=3, \(d[c]=5\)d[c]=5최소값 추출 때마다 얻은 값이 최종 최단 거리입니다.

같은 graph에 negative edge가 추가되어 \(c\rightarrow a:-10\)c→a:-10처럼 reachable negative cycle이 생기면 Bellman-Ford의 추가 check에서 계속 relax 가능한 edge가 나타납니다. 그때는 "더 짧은 길을 찾았다"가 아니라 "shortest distance가 finite하게 정의되지 않는다"라고 답해야 합니다.

풀이 예제 4

Bellman-Ford를 표 없이 말로 추적하기

Bellman-Ford는 표를 모두 그리지 않아도 round의 의미를 말할 수 있어야 합니다. Source s, edges \(s\rightarrow a:4\)s→a:4, \(s\rightarrow b:5\)s→b:5, \(a\rightarrow b:-2\)a→b:-2, \(b\rightarrow c:3\)b→c:3, \(a\rightarrow c:6\)a→c:6라고 합시다. Negative edge는 있지만 negative cycle은 없습니다.

반복완화 결과해석
초기화초기 거리: \(d[s]=0\)d[s]=0, \(d[a]=d[b]=d[c]=\infty\)d[a]=d[b]=d[c]=∞출발점에서 아직 어떤 정점으로도 가는 방법을 모릅니다.
1번째 full pass\(s\rightarrow a\)s→a\(d[a]=4\)d[a]=4, \(s\rightarrow b\)s→b\(d[b]=5\)d[b]=5, 이어서 \(a\rightarrow b\)a→b를 보면 \(d[b]=2\)d[b]=2, \(b\rightarrow c\)b→c\(d[c]=5\)d[c]=5가 됩니다.edge order에 따라 한 pass 안에서 여러 단계 정보가 전파될 수 있습니다. 그래도 correctness 주장은 안전하게 |V|-1 passes를 기준으로 합니다.
2번째 pass모든 edge를 다시 보지만 더 줄어들지 않습니다.이미 best 후보가 안정화되었습니다. 하지만 알고리즘은 일반적으로 필요한 pass 수를 보장하기 위해 계속 진행합니다.
3번째 pass\(|V|=4\)|V|=4이므로 총 \(|V|-1=3\)|V|-1=3 passes 뒤 종료 후보가 됩니다.negative cycle이 없다면 shortest simple path는 최대 3 edges입니다.
추가 check어떤 edge도 더 relax되지 않습니다.reachable negative cycle이 없다고 보고 \(d[a]=4\)d[a]=4, \(d[b]=2\)d[b]=2, \(d[c]=5\)d[c]=5를 반환할 수 있습니다.

시험에서 Bellman-Ford를 설명할 때 “음수 간선을 허용한다”까지만 말하면 반쪽 답입니다. 반드시 “하지만 도달 가능한 음수 순환이 있으면 유한한 최단 거리가 정의되지 않는다”까지 덧붙여야 합니다.

알고리즘 선택 점검표

문제 문장에서 알고리즘을 고르는 절차

실전에서는 그림이 복잡해서 알고리즘 이름부터 떠오르기 쉽습니다. 아래 순서로 읽으면 문제 유형을 잘못 고를 가능성이 줄어듭니다.

1. 목적어 찾기

문장이 Spannbaum, spanning tree, alle Knoten verbinden, Gesamtgewicht를 말하면 MST입니다. 문장이 Startknoten s, kürzester Weg, dist, pred를 말하면 최단 경로입니다. “모든 정점”과 “출발점에서”는 서로 다른 신호입니다.

2. 그래프 모형 확인

MST 강의의 기본 설정은 연결된 무방향 가중 그래프입니다. 방향 그래프에서 “MST”라고 쓰여 있다면 일반 Kruskal·Prim 문제가 아니라 방향 신장 트리(arborescence) 같은 다른 문제일 수 있으므로 문제 문장을 확인해야 합니다. 최단 경로는 방향·무방향 그래프 모두 가능하지만 간선 가중치의 부호가 중요합니다.

3. 가중치 부호 확인

Dijkstra는 \(w(e)\ge 0\)w(e)≥0가 필요합니다. 0은 허용되고 음수 간선이 문제입니다. Bellman-Ford는 음수 간선을 허용하지만 음수 순환을 감지해야 합니다. Kruskal·Prim에서는 음수 간선 자체가 문제가 아닙니다.

4. 출력 형식 확인

Kruskal 문제는 선택한 간선과 연결 성분 집합을 요구할 수 있습니다. Prim 문제는 keypred 표를 요구할 수 있습니다. Dijkstra·Bellman-Ford 문제는 dist, pred, 완화 순서, 음수 순환 여부를 요구할 수 있습니다.

5. 동률 처리 확인

가중치나 거리가 같다면 문제에서 사전순, 숫자순, 표의 순서 같은 동률 처리 규칙(tie-breaking)을 줄 수 있습니다. 규칙이 없다면 올바른 출력이 여러 개일 수 있으므로, 답안에는 자신이 따른 순서를 명시하는 것이 안전합니다.

6. 증명 의무 확인

“왜 맞는가”를 물으면 MST는 절단·가벼운 간선·안전한 간선의 교환 논증을 말하고, Dijkstra는 음수가 아닌 가중치에 의존하는 최소값 추출의 확정성을 말합니다. “그냥 탐욕적이어서”는 증명이 아닙니다.

알고리즘 비교

네 알고리즘을 한 표로 비교하기

비슷한 단어를 한 칸씩 분리해서 외우면 MC에서 섞이지 않습니다.

알고리즘문제핵심 상태선택·완화 기준대표 함정
KruskalMST연결 성분 집합 set(v), 선택한 간선 집합 A가중치가 작아지지 않는 순서로 보고, 연결 성분이 다를 때만 추가가벼운 간선이라도 같은 연결 성분이면 건너뛰어야 합니다.
PrimMST우선순위 큐 Q, key[v], pred[v]현재 트리와 잇는 가장 싼 경계 간선의 정점을 추출key[v]를 출발점 거리로 착각하면 안 됩니다.
Dijkstra가중치가 음수가 아닌 단일 출발점 최단 경로(SSSP)Q, dist[v], pred[v], 확정 집합 S잠정 거리가 최소인 정점을 추출한 뒤 나가는 간선을 완화DAG 전용이 아니며, 가중치 0인 간선은 허용됩니다.
Bellman-Ford음수 간선을 허용하는 SSSP. 단, 유한한 거리에는 도달 가능한 음수 순환이 없어야 함dist[v], pred[v], 반복 횟수모든 간선을 |V|-1회 완화한 뒤 한 번 더 검사음수 간선과 음수 순환을 혼동하면 안 됩니다.
시험 함정

서술형에서 감점되는 답안 패턴

정의가 하나 빠짐

MST를 “최소 트리”라고만 쓰고 신장, 연결, 무순환, 모든 정점 포함 중 하나를 빼면 정의가 약합니다. 특히 모든 정점 포함을 빼면 Steiner 트리나 부분 연결처럼 들릴 수 있습니다.

증명 단어만 나열

“안전한 간선이므로 절단 속성”이라고만 쓰면 순환 논증입니다. 절단이 A를 존중하고, 가벼운 교차 간선을 기존 MST의 교차 간선과 바꾼다는 구조를 보여야 합니다.

실행 시간만 외움

Dijkstra의 실행 시간은 우선순위 큐 구현에 따라 달라질 수 있습니다. 문제에서 이진 힙, Fibonacci 힙, 인접 행렬 같은 구현 조건이 주어졌는지 봐야 합니다. 이 페이지는 개념 대비가 목표이므로 구현별 실행 시간 표를 새로 가정하지 않습니다.

음수 간선 처리 혼동

“음수 간선이 있으면 Bellman-Ford”라는 말만으로는 부족합니다. 도달 가능한 음수 순환이 있으면 최단 거리가 없고, 무방향 음수 간선은 양방향 표현에서 음수 순환이 됩니다.

선행자의 의미 혼동

Prim의 pred[v]는 MST 간선의 부모이고, Dijkstra·Bellman-Ford의 pred[v]는 현재 최적 경로의 선행자입니다. 이름은 같아도 해석이 다릅니다.

유일한 MST를 과잉 해석

모든 간선 가중치가 서로 다르면 MST는 유일하지만, 이것이 최단 경로까지 유일하다는 뜻은 아닙니다. 두 문제의 유일성 조건은 별도입니다.

오개념 바로잡기

자주 틀리는 생각 바로잡기

MST는 모든 정점 쌍의 최단 경로를 포함한다?

아닙니다. MST는 전체 트리 가중치를 최소화할 뿐 개별 경로가 최단임을 보장하지 않습니다. 풀이 예제 1이 반례입니다.

Prim은 Dijkstra와 같은 알고리즘이다?

겉모양만 비슷합니다. Prim의 key는 경계 간선 하나의 비용이고, Dijkstra의 dist는 출발점에서 정점까지 누적한 경로 비용입니다.

Kruskal에서는 가벼운 간선을 무조건 넣는다?

아닙니다. 가벼운 간선이라도 이미 같은 연결 성분을 이으면 순환을 만들기 때문에 넣지 않습니다.

Dijkstra는 순환을 만나면 실패한다?

아닙니다. 조건은 순환이 없다는 것이 아니라 모든 간선 가중치가 음수가 아니어야 한다는 것입니다. DAG 전용 알고리즘도 아닙니다.

Bellman-Ford는 음수 간선 때문에 실패한다?

아닙니다. Bellman-Ford는 음수 간선을 다룰 수 있습니다. 문제는 출발점에서 도달 가능한 음수 순환입니다.

모든 간선에 상수를 더하면 최단 경로가 보존된다?

일반적으로 거짓입니다. 경로마다 간선 수가 달라서 상수를 더하는 횟수도 달라집니다. 강의 06의 173쪽에서 다루는 핵심 함정입니다.

반례로 확인하는 객관식 함정

선지 판단을 위한 반례 세트

객관식 명제판정반례 또는 바로잡기
모든 MST는 임의의 두 정점 사이 최단 경로를 준다.거짓\(\text{AB}=1,\text{BC}=1,\text{CD}=1,\text{AD}=2,\text{AC}=3\)AB=1,BC=1,CD=1,AD=2,AC=3에서 MST 안의 A-D 경로 비용은 3이지만 최단 A-D 경로 비용은 2입니다.
Dijkstra는 간선 가중치가 0이면 사용할 수 없다.거짓전제조건은 \(w(e)\ge 0\)w(e)≥0입니다. 0은 허용됩니다.
Dijkstra는 DAG에서만 동작한다.거짓순환이 있어도 가중치가 음수가 아니면 됩니다. DAG 최단 경로는 위상 순서 동적 계획법으로도 풀 수 있지만, Dijkstra의 전제는 DAG가 아닙니다.
Bellman-Ford는 음수 간선이 있으면 사용할 수 없다.거짓음수 간선은 허용됩니다. 출발점에서 도달 가능한 음수 순환이 유한한 최단 거리를 막습니다.
Kruskal에서 \(\text{set}(u)=\text{set}(v)\)set(u)==set(v)이면 간선을 건너뛴다.같은 연결 성분 안의 간선은 순환을 만듭니다.
Prim의 key[v]는 출발점에서 v까지의 최단 거리다.거짓Prim의 키는 현재 트리와 v 사이에서 가장 싼 간선 하나의 가중치입니다.
MST에 음수 간선이 있으면 Kruskal·Prim이 실패한다.거짓강의 06의 92쪽은 Kruskal과 Prim이 MST에서 음수 간선 가중치도 처리한다고 설명합니다.
무방향 음수 간선은 Bellman-Ford 표현에서 문제가 될 수 있다.무방향 간선을 양방향 호로 보면 음수인 길이 2의 순환이 됩니다.
모든 간선 가중치가 서로 다르면 MST는 유일하다.Sheet10의 증명형 사실입니다. 단, 이것이 최단 경로까지 유일하다는 뜻은 아닙니다.
증명 직관

구두시험에서 말할 증명 뼈대

일반 MST 불변식

A는 항상 어떤 MST의 부분집합입니다. 처음에는 공집합이므로 자명하게 참입니다. 매 반복에서 안전한 간선만 추가하면 불변식이 유지됩니다. A가 신장 트리가 되면 그것 자체가 MST입니다.

절단을 이용한 교환

현재 A를 존중하는 절단을 잡고 가벼운 교차 간선 e를 고릅니다. 기존 MST가 e를 포함하지 않으면 MST 경로에서 같은 절단을 건너는 간선 하나를 빼고 e를 넣어도 트리이며 가중치가 늘지 않습니다.

Dijkstra의 확정성

처음으로 잘못 확정된 정점 u가 있다고 가정합니다. 실제 최단 경로에서 아직 S 밖으로 나가는 첫 정점 y를 보면, 음수가 아닌 가중치 때문에 \(y.\text{dist} \le u.\text{dist}\)y.dist ≤ u.dist가 되어 최소값 추출 선택과 충돌합니다.

구두시험 답안

60초·3분·심화 답안 스크립트

60초 답안

최소 신장 트리(MST, minimaler Spannbaum)는 연결된 무방향 가중 그래프에서 모든 정점을 포함하는 무순환 트리의 전체 가중치를 최소화하는 문제입니다. Kruskal은 간선을 가중치 순서로 보며 서로 다른 연결 성분을 잇는 간선만 추가하고, Prim은 하나의 부분 트리를 키가 가장 작은 경계 간선으로 확장합니다. 최단 경로(kürzeste Wege)는 출발점 s에서 각 정점까지의 경로 가중치를 최소화합니다. Dijkstra는 음수가 아닌 가중치에서 최소 dist를 추출해 확정하고 간선을 완화합니다. Bellman-Ford는 모든 간선을 |V|-1회 완화한 뒤 추가 완화 가능성으로 음수 순환을 감지합니다.

3분 답안

먼저 MST와 SSSP의 목적함수를 분리합니다. MST에는 출발점(source)이 없고 \(w(T)=\sum_{e\in E_T}w(e)\)w(T)=Σₑ∈Eₜ w(e)를 최소화합니다. 정확성은 안전한 간선 불변식(safe-edge invariant)과 절단 속성(cut property)으로 증명합니다. 집합 A를 존중하는 절단의 가벼운 간선(light edge)은 교환 논증(exchange argument)에 따라 안전합니다. Kruskal에서는 연결 성분을 가르는 절단을 생각하고, Prim에서는 현재 트리와 바깥 정점 사이의 절단을 생각합니다. 최단 경로에서는 dist[v]가 현재까지 알려진 최선의 상한이며 완화(relaxation)로 낮춥니다. Dijkstra의 최소값 추출 뒤 확정성은 \(w(e)\ge 0\)w(e)≥0에서만 성립합니다. 음수 간선 반례에서는 이미 확정한 정점의 거리가 나중에 더 짧아질 수 있습니다. Bellman-Ford는 음수 간선을 허용하지만 도달 가능한 음수 순환이 있으면 유한한 최단 거리가 존재하지 않습니다.

심화 답안

증명까지 말하겠습니다. Generic MST는 A가 어떤 MST의 부분집합이라는 invariant를 유지합니다. Cut (S,V-S)A를 respect하고 \(e=\{u,v\}\)e={u,v}가 그 cut의 light edge라면, A를 포함하는 MST T가 있습니다. eT에 없으면 Tu-v path에는 같은 cut을 건너는 edge f가 있습니다. e는 light이므로 \(w(e)\le w(f)\)w(e)≤w(f)이고, T-f+e는 spanning tree이며 weight가 증가하지 않습니다. 따라서 e를 포함하는 MST가 존재합니다. Dijkstra의 proof는 final set S에 대해 처음 틀린 extracted vertex u를 가정하고 실제 shortest path에서 S 밖으로 처음 나가는 vertex y를 잡습니다. nonnegative weights 때문에 \(\text{shortest}(s,y)\le \text{shortest}(s,u)\)shortest(s,y)≤shortest(s,u)이고, x가 이미 relaxed했으므로 y.dist는 충분히 작아야 합니다. 그런데 extract-min이 u를 먼저 뽑았다는 사실과 충돌합니다.

손풀이 답안 틀

손으로 알고리즘을 실행할 때의 답안 틀

그래프 알고리즘 문제는 최종 edge set이나 distance 값만 맞아도 부분점수는 받을 수 있지만, 중간 상태를 요구하는 Sheet10식 문제에서는 표를 채우는 습관이 점수입니다. 아래 틀은 실제 답안지에서 한 줄씩 확인할 순서입니다.

Kruskal 답안 틀

먼저 모든 edge를 weight 오름차순으로 다시 적습니다. 같은 weight가 있으면 문제의 tie-breaking을 옆에 표시합니다. 그 다음 각 vertex의 initial set을 singleton으로 둡니다. edge {u,v}마다 set(u)set(v)를 비교합니다. 다르면 Dazu? ja, edge를 A에 추가하고 union 후 관련 vertex의 set column을 모두 새 component로 바꿉니다. 같으면 Dazu? nein, 이유는 cycle이라고 적고 set columns는 그대로 둡니다. 선택 edge가 |V|-1개가 되면 spanning tree가 완성됩니다.

Prim 답안 틀

표 header를 vertex, key, pred, in Q?로 잡습니다. 처음에는 root의 key만 가장 작게 두고 나머지는 infinity입니다. 매 round에서 Q 안의 minimum key vertex를 꺼내 tree에 넣습니다. 그 vertex의 adjacency list를 보며 아직 Q 안에 있는 neighbor만 갱신합니다. \(w(\{u,v\}) < \text{key}[v]\)w({u,v}) < key[v]일 때만 key[v]pred[v]를 바꿉니다. 이미 tree에 들어온 vertex는 다시 갱신하지 않습니다. 최종 MST edge는 root를 제외한 모든 {v,pred[v]}입니다.

Dijkstra 답안 틀

초기화는 \(d[s]=0\)d[s]=0, 나머지 , 모든 predecessor는 NIL입니다. 매 step에서 아직 확정되지 않은 vertex 중 distance가 가장 작은 u를 고릅니다. 그 순간 u는 final이라고 표시합니다. 그 다음 u에서 나가는 모든 edge (u,v)를 relax합니다. 갱신되면 distance와 predecessor를 함께 바꿉니다. 답안에서 "왜 final인가"를 물으면 nonnegative weights 때문에 나중에 더 싼 우회가 생기지 않는다고 말합니다.

Bellman-Ford 답안 틀

초기화는 Dijkstra와 같습니다. 그러나 minimum vertex를 고르지 않습니다. 대신 edge list 전체를 정해진 순서대로 반복해서 봅니다. |V|-1번의 full pass를 하고, 각 pass에서 relax된 값은 다음 edge 검사에 바로 사용할 수 있습니다. 마지막으로 edge list를 한 번 더 훑습니다. 이때 relax 가능한 edge가 하나라도 있으면 reachable negative cycle이 있다고 보고 finite shortest distances를 반환하지 않습니다.

심화 후속 질문

교수가 이어서 물을 수 있는 질문과 답의 방향

구두시험에서는 첫 답이 맞으면 바로 더 깊게 묻습니다. 아래 질문은 답을 외우기보다 방향을 기억하는 용도입니다.

후속 질문좋은 답의 방향피해야 할 답
Kruskal이 고르는 edge가 왜 light edge인가요?현재 set(u)와 나머지를 나누는 cut을 잡습니다. edge를 weight order로 보므로, 아직 두 component를 잇는 더 가벼운 crossing edge가 있었다면 먼저 처리되었을 것입니다. cycle이 되지 않는 가장 가벼운 crossing edge이므로 safe입니다."정렬했으니까 맞다"라고만 말하면 proof가 부족합니다.
Prim과 Kruskal은 항상 같은 MST를 만드나요?모든 edge weights가 distinct이면 MST가 unique이므로 결과 edge set이 같습니다. tie가 있으면 서로 다른 MST를 만들 수 있지만 total weight는 minimum입니다.항상 같은 순서로 edge를 고른다고 말하면 틀립니다.
Dijkstra proof에서 nonnegative가 정확히 어디 쓰이나요?실제 shortest path가 finalized set S에서 밖으로 처음 나가는 vertex y를 볼 때, 남은 path edges가 negative가 아니어야 \(\text{shortest}(s,y) \le \text{shortest}(s,u)\)shortest(s,y) ≤ shortest(s,u) 같은 비교가 안전합니다."negative면 계산이 복잡해서"처럼 직관만 말하면 부족합니다.
Bellman-Ford에서 extra pass가 왜 negative cycle을 뜻하나요?|V|-1 edges보다 긴 더 좋은 walk가 필요하다는 뜻이고, finite graph에서 vertex가 반복되면 cycle이 포함됩니다. 그 cycle이 distance를 낮추는 방향이면 reachable negative cycle입니다.extra pass는 정확도를 높이기 위한 보너스라고 말하면 틀립니다.
MST 알고리즘이 negative edge를 허용하는 이유는?MST는 cycle 없는 spanning tree를 고르는 문제이고, edge weight order와 cut property는 negative weight에서도 성립합니다. negative edge는 오히려 먼저 선택될 수 있습니다.Dijkstra와 섞어서 negative edge면 모든 greedy가 실패한다고 말하면 안 됩니다.
Shortest-path tree와 BFS tree, MST의 관계는?BFS tree는 unweighted graph에서 source 기준 shortest edge-count paths를 줍니다. Dijkstra/Bellman-Ford predecessor tree는 weighted source 기준 shortest paths를 줍니다. MST는 source 기준이 아니라 전체 spanning total weight 기준입니다.세 tree를 모두 "최단 트리"라고 부르면 문제 목적이 사라집니다.
능동 회상

힌트가 붙은 회상 질문

답을 보지 말고 한 문장씩 말해 보세요. 힌트는 막힐 때만 확인합니다.

1

MST 목적함수를 수식과 말로 정의하세요.
힌트: 출발점 없음, 모든 정점, 무순환, 전체 가중치.

2

단일 출발점 최단 경로(SSSP)의 목적함수를 수식과 말로 정의하세요.
힌트: shortest(s,v), 경로 가중치 최소화.

3

왜 MST 안의 경로가 최단 경로일 필요가 없나요?
힌트: 전체 트리 비용과 한 정점 쌍의 경로 비용은 다릅니다.

4

안전한 간선의 의미를 설명하세요.
힌트: A ∪ {e}가 여전히 어떤 MST의 부분집합이어야 합니다.

5

절단 속성을 교환 논증으로 네 문장 안에 말하세요.
힌트: 기존 MST 경로, 교차 간선 교환, 가중치가 커지지 않음.

6

Kruskal에서 \(\text{set}(u)=\text{set}(v)\)set(u)==set(v)이면 왜 건너뛰나요?
힌트: 이미 연결됨, 순환.

7

Sheet10 Kruskal 표에서 변하지 않는 집합 열은 어떻게 표시하나요?
힌트: 문제 지시에 따라 \(=\)=로 복사합니다.

8

Prim의 key[v]와 Dijkstra의 dist[v] 차이를 말하세요.
힌트: 간선 하나의 비용과 누적 경로 비용.

9

완화 규칙을 의사코드로 쓰세요.
힌트: \(v.d > u.d + w(u,v)\)v.d > u.d + w(u,v).

10

Dijkstra의 최소값 추출 불변식은 무엇인가요?
힌트: 추출된 u의 거리는 최종 최단 거리입니다.

11

Dijkstra에서 음수 간선이 왜 위험한가요?
힌트: 나중에 찾은 경로가 이미 확정한 정점을 개선할 수 있습니다.

12

Bellman-Ford가 |V|-1회 반복하는 이유는?
힌트: 단순 최단 경로의 최대 간선 수.

13

Bellman-Ford의 음수 순환 검사를 말하세요.
힌트: 정해진 반복 뒤 한 번 더 완화할 수 있는지 봅니다.

14

무방향 음수 간선의 주의점을 설명하세요.
힌트: 두 방향의 호가 음수 순환을 만듭니다.

15

모든 간선 가중치가 서로 다르면 MST의 유일성에 어떤 결론이 나오나요?
힌트: MST는 유일하지만 최단 경로까지 유일하다는 뜻은 아닙니다.

강의 자료에 근거한 참고 사항

  • Vorlesung\06GraphAlgorithms__moodle_2026-06-16.pdf 82~84쪽: MST와 신장 트리의 정의.
  • Vorlesung\06GraphAlgorithms__moodle_2026-06-16.pdf 85~92쪽: 일반 MST, 안전한 간선, 절단, 가벼운 간선, 교환 논증, Kruskal·Prim 설계 참고.
  • Vorlesung\06GraphAlgorithms__moodle_2026-06-16.pdf 93~108쪽: Kruskal 의사코드·정확성·예제·실행 시간과 Prim 의사코드 도입.
  • Vorlesung\06GraphAlgorithms__moodle_2026-06-16.pdf 160~174쪽: Dijkstra 예제·정확성·음수 간선 반례·상수 더하기의 주의점·무방향 음수 간선의 주의점.
  • Übung\AuD26_Sheet10.pdf와 해설: Kruskal 표 연습, Prim·Dijkstra·Bellman-Ford 유형의 문제, MST 유일성 증명 방식.
  • AuD Gedächtnisprotokoll SoSe 2025.md: Dijkstra, Bellman-Ford, 그래프 알고리즘, 설계 패러다임에 관한 객관식 함정.

자료 범위 안내: 로컬 자료 조각에는 MST, Kruskal, Prim 도입, Dijkstra 정확성과 음수 간선의 주의점이 명확히 포함되어 있습니다. Bellman-Ford의 세부 내용은 표준 강의 수준과 Sheet10 중심의 학습 틀을 사용했습니다. 정확한 슬라이드 쪽이 필요하면 PDF의 최단 경로 절을 직접 확인하거나 Sheet10 해설을 함께 첨부하세요.

AI 후속 학습 프롬프트

Vorlesung/06GraphAlgorithms.pdf, Vorlesung/06GraphAlgorithms__moodle_2026-06-16.pdf, Übung/AuD26_Sheet10.pdf, Übung/AuD26_Sheet10-Sol.pdf, data/aud_chunks.jsonl을 첨부하세요.

AUD 시험용 MST와 최단 경로를 한국어로 가르쳐 주세요.
minimaler Spannbaum, Schnitt, leichte Kante, sichere Kante, Kruskal, Prim, kuerzester Weg, Relaxation, Dijkstra, Bellman-Ford, negativer Zyklus 같은 독일어·영어 핵심 용어는 괄호로 함께 보여 주세요.
먼저 MST 목적함수와 단일 출발점 최단 경로(SSSP) 목적함수를 분리하세요.
AB=1, BC=1, CD=1, AD=2, AC=3인 그래프로 MST 안의 경로가 최단 경로일 필요가 없음을 보여 주세요.
이어서 Kruskal 표, Prim의 key와 Dijkstra의 dist 차이, Dijkstra의 음수가 아닌 가중치 전제, Bellman-Ford의 음수 순환 감지, 객관식 함정과 구두시험 답안을 연습시키되 질문은 한 번에 하나씩 제시하세요.
수식 표기

읽는 순서가 보이는 핵심 공식

정의, 수식, 시험 판정 문장을 분리해서 공식이 답안에서 어떻게 쓰이는지 바로 확인합니다.

가중 그래프

그래프 알고리즘의 입력을 먼저 고정합니다.

\[G=(V,E),\qquad w:E\to\mathbb{R}\]G=(V,E),\qquad w:E\to\mathbb{R}
  • V: vertex/Knoten 집합
  • E: edge/Kante 집합
  • w(e): 간선 가중치(edge weight, Gewicht)

MST와 shortest path 모두 weighted graph를 다루지만 최적화 대상이 다릅니다.

MST 목적함수

MST는 source 없이 전체 연결 tree의 총비용을 최소화합니다.

\[\min_{T} w(T)=\sum_{e\in E_{T}}w(e),\qquad T=(V,E_{T}),\quad |E_{T}|=|V|-1\]\minₜ w(T)=Σ[e\in Eₜ]w(e),\qquad T=(V,Eₜ),\quad |Eₜ|=|V|-1
  • \(T=(V,E_{T})\)T=(V,Eₜ)
  • spans V: 모든 vertex 포함
  • acyclic: cycle 없음

여기서 T는 모든 정점을 포함하고 순환이 없는 신장 트리입니다. 시험 답안에서는 '모든 정점', '무순환', '전체 가중치 최소'를 함께 말해야 합니다.

경로 가중치

Shortest path는 tree 전체가 아니라 하나의 path 비용을 봅니다.

\[p=(v_{1},\ldots,v_{k}),\qquad w(p)=\sum_{i=1}^{k-1}w(v_{i},v_{i+1})\]p=(v₁,\ldots,vₖ),\qquad w(p)=Σ[i=1]ᵏ-1}w(vᵢ,vᵢ+1})
  • p: source에서 destination까지 이어진 path
  • w(p): path 위 edge weight 합

MST 안의 path가 이 값을 최소화한다는 보장은 없습니다.

단일 출발점 최단 경로 목적함수

Single-source shortest paths는 source s에서 시작합니다.

\[\operatorname{shortest}(s,v)=\min_{p:s\leadsto v}w(p)\]\operatorname{shortest}(s,v)=\minₚ:s\leadsto v}w(p)
  • s: 출발 정점(Anfangsknoten, source)
  • v: 도착 정점(target vertex)
  • dist[v] 또는 v.d: 현재 알려진 상한

source가 나오면 MST가 아니라 Dijkstra/Bellman-Ford 쪽으로 생각합니다.

완화 규칙

Shortest-path 알고리즘의 핵심 갱신 동작입니다.

\[v.d>u.d+w(u,v)\Longrightarrow v.d\gets u.d+w(u,v),\quad v.\mathrm{pred}\gets u\]v.d>u.d+w(u,v)\Longrightarrow v.d\gets u.d+w(u,v),\quad v.\mathrm{pred}\gets u
  • u.d + w(u,v): u를 거쳐 v로 가는 후보 거리
  • v.pred: 현재 최단 후보 경로에서 v의 predecessor

Dijkstra도 Bellman-Ford도 relax를 하지만, 어떤 순서와 전제로 반복하는지가 다릅니다.

Kruskal 간선 추가 규칙

Kruskal은 component가 다른 두 vertex를 잇는 edge만 추가합니다.

\[\mathrm{set}(u)\ne\mathrm{set}(v)\Longrightarrow A\gets A\cup\{\{u,v\}\}\]\mathrm{set}(u)\ne\mathrm{set}(v)\Longrightarrow A\gets A\cup\{\{u,v\}\}
  • set(u): 서로소 집합(Union-Find)에서 u가 속한 연결 성분
  • skip: 이미 같은 component이면 cycle 발생

Sheet10 G3 표에서는 Dazu?와 set columns를 함께 갱신합니다.

Prim의 key 의미

Prim의 key는 source distance가 아니라 frontier edge 비용입니다.

\[\mathrm{key}[v]=\min\{w(\{u,v\}):u\in A,\ v\notin A\}\]\mathrm{key}[v]=\min\{w(\{u,v\}):u\in A,\ v\notin A\}
  • pred[v]: 그 minimum edge의 tree-side endpoint
  • Q: 아직 tree에 들어오지 않은 vertices

Sheet10 G2처럼 같은 key이면 문제의 tie-breaking, 예를 들어 alphabetic order를 따릅니다.

Dijkstra의 전제조건

Dijkstra의 extract-min 확정은 negative edge가 없을 때 안전합니다.

\[\forall e\in E:\quad w(e)\ge 0\]\forall e\in E:\quad w(e)\ge 0
  • 0 edge: 허용
  • negative edge: 나중에 더 짧은 우회 path가 생겨 finality가 깨질 수 있음

Lecture 06 pages 166-173은 negative edge counterexample과 단순히 weight를 더하는 시도가 왜 틀리는지 보여줍니다.

Bellman-Ford 반복과 검사

Bellman-Ford는 느리지만 negative edge를 relaxation 반복으로 처리합니다.

\[|V|-1\text{회 모든 간선 완화};\quad \exists (u,v):v.d>u.d+w(u,v)\Longrightarrow\text{도달 가능한 음수 순환}\]|V|-1\text{회 모든 간선 완화};\quad \exists (u,v):v.d>u.d+w(u,v)\Longrightarrow\text{도달 가능한 음수 순환}
  • |V|-1: simple shortest path의 최대 edge 수
  • 추가 검사: 음수 순환 탐지

reachable negative cycle이 있으면 shortest distance가 finite value로 정의되지 않습니다.

선수 개념과 필수 용어 (Prerequisites and Vocabulary)

  • Graph 용어: vertex(Knoten), edge(Kante), directed/undirected, weight(Gewicht), path(Weg), cycle(Zyklus).
  • Tree 용어: connected + acyclic, 그리고 |V|개 vertex를 모두 포함하면 spanning tree(Spannbaum).
  • Priority queue/extract-min 감각: Prim과 Dijkstra 모두 최소값을 꺼내지만 key와 dist의 의미가 다릅니다.
  • Relaxation 감각: 어떤 후보값을 더 작은 값으로 낮추는 동작입니다.

단계별 풀이 예제 (Worked Examples)

\(\text{AB}=1, \text{BC}=1, \text{CD}=1, \text{AD}=2, \text{AC}=3\)AB=1, BC=1, CD=1, AD=2, AC=3에서 Kruskal 실행

  1. 간선을 가중치 순서 AB, BC, CD, AD, AC로 정렬합니다.
  2. A와 B가 서로 다른 연결 성분이므로 AB를 추가합니다.
  3. {A,B}와 C가 서로 다른 연결 성분이므로 BC를 추가합니다.
  4. {A,B,C}와 D가 서로 다른 연결 성분이므로 CD를 추가합니다.
  5. 이제 |\(V|-1=3\)V|-1=3개의 간선을 골랐으므로 \(T=\{\text{AB},\text{BC},\text{CD}\}, w(T)=3\)T={AB,BC,CD}, w(T)=3이고 MST가 완성됩니다.

같은 그래프에서 A부터 D까지의 최단 경로

  1. 직접 경로 A-D의 비용은 2입니다.
  2. MST 내부 경로 A-B-C-D의 비용은 \(1+1+1=3\)1+1+1=3입니다.
  3. 경로 A-C-D의 비용은 \(3+1=4\)3+1=4입니다.
  4. 따라서 \(\text{shortest}(A,D)=2\)shortest(A,D)=2이며, MST 내부 경로가 아니라 간선 AD를 사용합니다.

Sheet10 G5의 Bellman-Ford 표를 읽는 순서

  1. \(a.d=0,\)a.d=0,나머지 모든 거리는 ∞로 초기화합니다.
  2. 각 반복에서 모든 방향 간선을 검사하고 후보 거리가 더 작으면 완화합니다.
  3. |V|-1회가 끝나면 모든 간선을 한 번 더 검사합니다.
  4. 더 완화할 수 있는 간선이 없으면 도달 가능한 음수 순환이 없으며 pred 포인터로 경로를 복원합니다.

핵심 학습 항목 (Active Recall With Hints)

1

  • MST와 SSSP의 목적 함수를 각각 한 문장과 하나의 수식으로 말하세요.

2

  • Spanning tree가 왜 |V|-1개의 edge를 갖는지, cycle과 연결성 관점에서 설명하세요.

3

  • Cut property에서 cut, light edge, safe edge가 무엇인지 말하세요.

4

  • Kruskal에서 \(\text{set}(u)=\text{set}(v)\)set(u)==set(v)인 edge를 왜 버리는지 설명하세요.

5

  • Prim의 key[v]와 pred[v]가 무엇을 저장하는지 Sheet10 G2 표 형식으로 설명하세요.

6

  • Prim의 key[v]와 Dijkstra의 dist[v] 차이를 한 문장으로 구분하세요.

7

  • Relaxation rule을 v.d, u.d, w(u,v), pred로 쓰고 의미를 설명하세요.

8

  • Dijkstra의 nonnegative precondition이 extract-min finality와 어떻게 연결되는지 설명하세요.

9

  • Bellman-Ford가 왜 |V|-1 rounds를 쓰는지 shortest simple path의 edge 수로 설명하세요.

10

  • 마지막 extra relaxation 가능성이 왜 reachable negative cycle을 뜻하는지 설명하세요.

11

  • \(\text{AB}=1, \text{BC}=1, \text{CD}=1, \text{AD}=2, \text{AC}=3\)AB=1, BC=1, CD=1, AD=2, AC=3예시에서 MST와 shortest(A,D)를 각각 구하세요.

12

  • Distinct edge weights가 unique MST를 보장하는 증명 아이디어를 cycle/exchange로 설명하세요.

출처에 근거한 설명 (Source-Grounded Notes)

  • Vorlesung\06GraphAlgorithms.pdf 80~85쪽은 최소 신장 트리(minimaler Spannbaum), 신장 트리, 전체 가중치, 일반 MST, 안전한 간선, 종료와 정확성의 핵심을 정의합니다.
  • Vorlesung\06GraphAlgorithms.pdf 86~99쪽은 절단과 가벼운 간선의 안전성, 연결 성분·순환 논리를 쓰는 Kruskal을 전개합니다.
  • Vorlesung\06GraphAlgorithms.pdf 100~115쪽은 Prim의 key/pred/Q 표기와 MST 구성을 다룹니다.
  • Vorlesung\06GraphAlgorithms__moodle_2026-06-16.pdf 132~150쪽은 SSSP 초기화, 완화, DAG 최단 경로와 Bellman-Ford식 반복의 아이디어를 다룹니다.
  • Vorlesung\06GraphAlgorithms__moodle_2026-06-16.pdf 152~165쪽은 Dijkstra 의사코드, 음수가 아닌 가중치 조건, 실행 시간, 예제와 확정성 논증을 제공합니다.
  • Vorlesung\06GraphAlgorithms__moodle_2026-06-16.pdf 166~174쪽은 음수 간선 반례, 모든 가중치에 상수를 더하는 방식의 오류와 무방향 음수 간선의 주의점을 보여 줍니다.
  • Übung\AuD26_Sheet10.pdf는 Prim·Kruskal 실행과 비교, Bellman-Ford 실행, MST 유일성 증명을 요구합니다.
  • Übung\AuD26_Sheet10-Sol.pdf 1~14쪽은 Prim·Kruskal·Bellman-Ford 표의 완성 답안과 필수 최경량 간선, 서로 다른 가중치에서의 유일한 MST 증명 아이디어를 제공합니다.

관련 개념

다음 튜터 프롬프트

마지막 생성: 2026-08-03 03:24