Kürzeste Pfade, Dijkstra und Bellman-Ford
최단 경로, Dijkstra, Bellman-Ford
중요한 독일어·영어 용어는 유지하되 설명과 학습 동선은 한국어 중심으로 제공합니다.
이 챕터의 문항별 독립 학습 페이지
단원 페이지에는 개요와 학습 순서만 둡니다. 각 문항의 용어·비유·수식·단계별 풀이·실제 채점은 아래 독립 페이지에서 이어집니다.
II-13 · 2개 선택
Dijkstra와 Bellman-Ford 알고리즘에 대한 다음 설명 중 정확히 두 개를 고르시오.
독립 개념 강의와 실제 채점 열기 →II-14 · 2개 선택
Dijkstra 알고리즘에 대한 다음 설명 중 정확히 두 개를 고르시오.
독립 개념 강의와 실제 채점 열기 →
30초 핵심 요약
완화(relaxation)는 u를 거쳐 v로 가는 비용이 더 작으면 v.dist와 v.pred를 갱신하는 규칙이다. Dijkstra는 모든 간선 가중치가 음이 아닌 값(nonnegative), 즉 \(w(u,v) \ge 0\)w(u,v) ≥ 0일 때 최솟값 추출(extract-min)로 꺼낸 정점의 dist가 최종값이라는 불변식을 사용한다. Bellman-Ford는 더 느리지만 음수 간선을 허용하며, 모든 간선을 |V|-1번 완화한 뒤 한 번 더 완화할 수 있으면 출발점에서 도달 가능한 음수 사이클이 있다고 판단한다.
Dijkstra는 \(w(u,v) \ge 0\)w(u,v) ≥ 0을 요구하며, 강의의 Fibonacci 힙 구현에서 실행시간은 \(\Theta(|V| \log |V| + |E|)\)Θ(|V| log |V| + |E|)이다. Bellman-Ford는 \(\Theta(|V|\cdot |E|)\)Θ(|V|·|E|)이며 음수 간선을 허용한다. 도달 가능한 음수 사이클이 있으면 유한한 최단 경로 답이 없다.
문장에 nur, DAG, Zyklus, Kantengewicht 0, O와 Θ의 차이, |E| 항 누락, 음수 간선과 음수 사이클의 혼동이 나오면 바로 전제부터 확인한다.
시험 연결
II
2
섹션 II는 A~D 가운데 정확히 두 개가 옳은 형식\((\text{exactly}_{\text{two}})\)(exactly(two))이다.
- II-13
- II-14
정답 글자를 외우는 대신 간선 가중치 전제, 음수 사이클, 그래프 방향, 실행시간 구현 가정을 보고 각 선택지를 독립적으로 참·거짓 판정한다.
기억 복원 자료(Gedächtnisprotokoll)는 재구성한 시험 문구이며 공식 정답지가 아니다. 아래 판정은 2026년 여름학기 강의와 연습 자료를 이용해 독립적으로 검토했다.
먼저 알아야 할 용어와 전제
- 간선 가중치 w를 가진 가중 방향 그래프 \(G=(V,E)\)
G=(V,E)를 이해한다. - 출발점 s에서 시작하는 단일 출발점 최단 경로(SSSP, single-source shortest paths)를 이해한다.
- 거리 추정값 d 또는 dist와 이전 정점 포인터 pred·pi를 이해한다.
- 완화(relaxation): \(v.\text{dist} > u.\text{dist} + w(u,v)\)
v.dist > u.dist + w(u,v)이면 v.dist와 v.pred를 갱신한다. - Dijkstra에서 사용하는 우선순위 큐 또는 최솟값 추출(extract-min) 연산을 이해한다.
- 음수 사이클이 출발점에서 도달 가능한지(reachability)를 구분한다.
개념 강의
최단 경로 문제는 출발점 s에서 각 정점까지의 현재 최선 후보 거리 dist를 계속 줄여 가는 문제다. Dijkstra는 '가장 가까워 보이는 정점은 이제 확정해도 된다'는 빠른 그리디(greedy) 판단을 사용하지만, 이는 뒤에서 음수 간선이 나타나 dist를 더 줄일 수 없다는 비음수 조건에 의존한다. Bellman-Ford는 그리디하게 확정하지 않고 모든 간선을 여러 번 훑으므로 음수 간선도 처리한다.
단일 출발점 최단 경로(SSSP, single-source shortest paths)는 출발점 s에서 도달 가능한 모든 정점 v까지의 shortest(s,v)를 구하는 문제다. 완화(Relaxation, Lockerung)는 간선 (u,v)에 대해 \(v.\text{dist} > u.\text{dist} + w(u,v)\)v.dist > u.dist + w(u,v)이면 v.dist := u.dist + w(u,v), v.pred := u로 갱신하는 연산이다. Dijkstra 알고리즘은 Q에서 dist가 가장 작은 정점 u를 꺼내고(EXTRACT-MIN) u에서 나가는 간선을 완화한다. Bellman-Ford 알고리즘은 |V|-1회 동안 모든 간선을 완화하고, 추가 검사에서도 완화 가능한 간선이 있으면 출발점에서 도달 가능한 음수 사이클을 보고한다.
- 그래프 방향이 중요하다. 방향 간선 (u,v)과 무방향 간선 {u,v}는 다르게 처리한다.
- 강의의 Dijkstra에서는 모든 간선이 \(w(u,v) \ge 0\)
w(u,v) ≥ 0을 만족해야 하며 0도 포함된다. - Bellman-Ford는 음수 간선을 허용하지만, 도달 가능한 음수 사이클이 있으면 유한한 최단 거리가 정의되지 않는다.
Dijkstra의 핵심 불변식은 비음수 가중치 아래에서 u가 Q에서 추출될 때 \(u.\text{dist} = \text{shortest}(s,u)\)u.dist = shortest(s,u)가 된다는 것이다. Bellman-Ford는 충분히 반복하면 간선이 최대 |V|-1개인 모든 최단 단순 경로의 정보가 완화를 통해 전파된다. 출발점에서 도달 가능한 사이클의 총가중치가 음수이면 반복할수록 경로 비용을 끝없이 줄일 수 있으므로, 영향을 받는 정점에는 유한한 최단 경로 값이 없다.
강의의 Fibonacci 힙 기반 Dijkstra 실행시간은 \(\Theta(|V| \log |V| + |E|)\)Θ(|V| log |V| + |E|)이다. 구현에 따라 이진 힙은 흔히 \(O((|V|+|E|) \log |V|)\)O((|V|+|E|) log |V|), 행렬·배열 방식은 \(O(|V|^2)\)O(|V|²)이 될 수 있다. Bellman-Ford의 실행시간은 \(\Theta(|V|\cdot |E|)\)Θ(|V|·|E|)이다. 두 알고리즘 모두 정점마다 dist와 pred를 저장하므로 그래프 표현 외에 \(O(|V|)\)O(|V|)의 추가 정점 상태 메모리를 사용한다.
가중치 0인 간선은 음이 아니므로 Dijkstra에서 허용된다. 양수 사이클이나 가중치 0인 사이클이 있다고 Dijkstra가 중단하지는 않으며 Q가 빌 때까지 정점을 처리한다. 도달 가능한 음수 사이클이 없는 음수 간선은 Bellman-Ford가 처리할 수 있다. 반면 무방향 그래프의 음수 간선은 양방향 표현에서 음수 2-사이클을 만들므로 Bellman-Ford는 음수 사이클을 검출하고 Dijkstra는 적용할 수 없다. 음수 가중치가 있는 DAG에는 위상 순서 기반 SSSP도 있지만 Dijkstra 자체가 DAG에만 제한되는 것은 아니다.
- nur
- nicht-negative Kantengewichte
- Directed Acyclic Graphs
- Zyklus
- Kantengewichte dürfen 0 sein
- \(O(|V| \log |V|)\)
O(|V| log |V|) - \(\Theta(|V| \log |V| + |E|)\)
Θ(|V| log |V| + |E|) - negative Kante
- negativer Zyklus
- 구현 가정 (implementation assumption)
최단경로 간선 완화 실험실
다음 상태를 먼저 예측한 뒤 한 단계 실행하여 확인하세요.
새 문장 판별 체크리스트
- 1. 알고리즘 이름을 먼저 본다. Dijkstra면 비음수 가중치, Bellman-Ford면 음수 간선 허용과 음수 사이클 검출을 떠올린다.
- 2. `nur`가 있으면 필요조건인지 충분조건인지 분리한다. Dijkstra는 DAG가 필요한 것이 아니라 \(w \ge 0\)
w ≥ 0이 필요하다. - 3. 음수 간선과 음수 사이클을 분리한다. Bellman-Ford는 음수 간선을 허용하지만, 도달 가능한 음수 사이클에서는 유한한 최단 경로를 반환할 수 없다.
- 4. 가중치 0은 음수가 아니다. Dijkstra의 전제 \(w \ge 0\)
w ≥ 0은 \(w = 0\)w = 0을 포함한다. - 5. 실행시간 문장에서는 |E| 항이 빠졌는지, Big-O인지 Θ인지, 어떤 우선순위 큐·그래프 표현을 가정하는지 확인한다.
- 6. 사이클 언급은 자동 종료 조건이 아니다. Dijkstra는 사이클 검출 알고리즘이 아니라 SSSP 알고리즘이다.
- 7. 정답이 정확히 두 개인 문항(exactly two)에서는 답 개수에 맞추지 말고 A~D를 각각 증명한다. 복기 문구가 모호하면 모호성으로 남긴다.
- 8. 거짓 문장은 가장 작은 반례로 깨 본다. 비음수 2-사이클, 가중치 0 간선, 밀집 그래프, 음수 간선 하나, 음수 사이클을 사용한다.
능동 회상
- Dijkstra의 정확성 불변식(invariant)을 한 문장으로 말하라. — 모든 간선 가중치가 음이 아닐 때 Q에서 EXTRACT-MIN된 정점 u는 그 순간 \(u.\text{dist} = \text{shortest}(s,u)\)
u.dist = shortest(s,u)가 되어 최종 확정된다. - Bellman-Ford가 |V|-1회 반복하는 이유는 무엇인가? — 도달 가능한 음수 사이클이 없으면 최단 단순 경로는 정점을 반복할 필요가 없어 간선 수가 최대 |V|-1개이고, 각 반복이 경로의 다음 간선 효과를 전파할 수 있기 때문이다.
- Dijkstra에서 weight 0은 허용되는가. 독일어 전제와 함께 답하라. — 허용된다. 강의(Vorlesung)의 전제(Voraussetzung)는 모든 간선에 대해 \(w(u,v) \ge 0\)
w(u,v) ≥ 0이므로 0은 비음수(nonnegative)에 포함된다. - Bellman-Ford가 거짓(false)을 반환하는 조건을 말하라. — |V|-1회 뒤에도 어떤 간선 (u,v)에 대해 \(v.\text{dist} > u.\text{dist} + w(u,v)\)
v.dist > u.dist + w(u,v)가 성립하면 출발점에서 도달 가능한 음수 사이클이 있다고 보고 false를 반환한다. - II-14의 \(O(|V| \log |V|)\)
O(|V| log |V|)선택지가 왜 틀렸는가. — 일반 그래프에서는 관련된 모든 간선을 완화해야 하므로 |E| 항을 생략할 수 없다. 강의는 Fibonacci 힙 기준 \(\Theta(|V| \log |V| + |E|)\)Θ(|V| log |V| + |E|)를 제시한다. - Dijkstra가 DAG에서만 가능하다는 주장을 어떻게 반박하는가? — DAG용 SSSP는 위상 순서 알고리즘(topological-order algorithm)이며 Dijkstra와 별개다. Dijkstra의 강의 전제는 비순환이 아니라 비음수 간선 가중치이다.
구두시험 질문
- Dijkstra와 Bellman-Ford의 전제 차이를 '음수 간선'과 '음수 사이클'을 모두 사용해 설명하라.
- Dijkstra의 최솟값 추출 단계(extract-min)가 왜 음수 간선에서 깨질 수 있는지 작은 그래프로 설명하라.
- Dijkstra 실행시간 \(\Theta(|V| \log |V| + |E|)\)
Θ(|V| log |V| + |E|)에서 두 항이 각각 어디서 오는지 말하라. - Bellman-Ford의 마지막 검사에서 아직 완화 가능한 간선이 왜 음수 사이클을 뜻하는지 설명하라.
시험 직전 요약
Dijkstra는 \(w(u,v) \ge 0\)w(u,v) ≥ 0에서 최솟값 추출을 사용하는 그리디 SSSP이다. Bellman-Ford는 음수 간선을 허용하며 반복 완화와 도달 가능한 음수 사이클 검출을 사용하는 SSSP이다.
강의 기준 Fibonacci 힙 Dijkstra는 \(\Theta(|V| \log |V| + |E|)\)Θ(|V| log |V| + |E|), Bellman-Ford는 \(\Theta(|V|\cdot |E|)\)Θ(|V|·|E|)이다.
Dijkstra는 가중치 0을 허용하지만 음수 간선은 허용하지 않는다. Bellman-Ford는 음수 간선을 허용하지만 도달 가능한 음수 사이클을 통과하는 유한한 답은 없다.
각 보기를 전제, 실행시간, 그래프 모양, 실패 조건에 관한 주장으로 표시한다. 그다음 정확한 단어 `nur`와 |E| 항의 누락 여부를 확인한다.
출처
- 출처 파일: AuD Gedächtnisprotokoll SoSe 2025.md; 근거 페이지·구간: MC section lines 136-146; 뒷받침하는 내용: 정확히 두 개 선택 규칙을 포함한 2025년 여름학기 II-13·II-14 복기 문구.; 검증 상태: reconstructed; 자료의 역할: reconstructed_exam; 추출 품질: \(\text{clean}_{\text{text}}\)
clean(text) - 출처 파일: Vorlesung\06GraphAlgorithms.pdf; 근거 페이지·구간: pp. 127-130; 뒷받침하는 내용: 최단 부분 경로 성질, 단일 출발점 최단 경로 알고리즘 개요, 완화 규칙, Bellman-Ford 실행 시간과 음수 순환 검사.; 검증 상태: verified; 자료의 역할: current_lecture; 추출 품질: \(\text{clean}_{\text{text}}\)
clean(text) - 출처 파일: Vorlesung\06GraphAlgorithms.pdf; 근거 페이지·구간: pp. 130-141; 뒷받침하는 내용: Bellman-Ford는 모든 간선을 |V|-1회 완화한 뒤 도달 가능한 음수 순환을 감지하며, 실행 시간은 \(\Theta(|V||E|)\)
Θ(|V||E|)입니다.; 검증 상태: verified; 자료의 역할: current_lecture; 추출 품질: \(\text{clean}_{\text{text}}\)clean(text) - 출처 파일: Vorlesung\06GraphAlgorithms__moodle_2026-06-16.pdf; 근거 페이지·구간: pp. 152-174; 뒷받침하는 내용: 현재 Moodle 자료는 Dijkstra의 전제 \(w(u,v) \ge 0, \text{Fibonacci}\)
w(u,v) ≥ 0, Fibonacci힙을 사용할 때의 실행 시간 \(\Theta(|V| \log |V|+|E|)\)Θ(|V| log |V|+|E|), 정확성 불변식, 음수 간선 반례와 무방향 그래프 관례를 제시합니다.; 검증 상태: verified; 자료의 역할: current_lecture; 추출 품질: \(\text{clean}_{\text{text}}\)clean(text) - 출처 파일: Übung\AuD26_Sheet10.pdf; 근거 페이지·구간: pp. 1-6; 뒷받침하는 내용: 공식 연습문제는 거리·선행자 값을 담은 Bellman-Ford 표와 최단 경로 복원을 요구합니다.; 검증 상태: verified; 자료의 역할: exercise_sheet; 추출 품질: \(\text{clean}_{\text{text}}\)
clean(text) - 출처 파일: Übung\AuD26_Sheet10-Sol.pdf; 근거 페이지·구간: pp. 7-12; 뒷받침하는 내용: 공식 해설은 Bellman-Ford의 표 상태를 보여 주며, 도달 가능한 음수 순환이 없으면 단일 출발점 최단 경로가 잘 정의된다고 설명합니다.; 검증 상태: verified; 자료의 역할: official_solution; 추출 품질: \(\text{clean}_{\text{text}}\)
clean(text) - 출처 파일: Übung\AuD26_Sheet11.pdf; 근거 페이지·구간: pp. 1-6; 뒷받침하는 내용: 공식 연습문제는 Dijkstra와 Bellman-Ford 모두에 대해 최단 거리 추정값과 선행자 표를 채우게 합니다.; 검증 상태: verified; 자료의 역할: exercise_sheet; 추출 품질: \(\text{clean}_{\text{text}}\)
clean(text) - 출처 파일: Übung\AuD26_Sheet11-GrpSol.pdf; 근거 페이지·구간: pp. 1-8; 뒷받침하는 내용: 그룹 해설은 Dijkstra가 현재 추정값이 가장 작은 정점을 반복 추출하고 나가는 간선을 완화한다고 설명하며, Bellman-Ford와 Dijkstra의 풀이 상태도 보여 줍니다.; 검증 상태: verified; 자료의 역할: official_solution; 추출 품질: \(\text{clean}_{\text{text}}\)
clean(text)
AI 후속 학습 프롬프트
마지막 생성: 2026-08-03 03:24