728x90
반응형
BoostCourse의 "[MIT]파이썬을 이용한 알고리즘의 이해" 강의 내용을 정리한 글입니다.
✔ 복습
d[v]는 출발점 s에서의 현재까지 구한 최단 경로의 길이입니다. 완화 과정을 통해 d[v]는 최종적으로 s부터 v까지의 최단 경로의 길이인 δ(s, v)가 됩니다. Π[v]는 s부터 v까지의 최단 경로에서 v의 선행자를 의미합니다. 최단 경로 계산에서의 기본 연산은 완화 연산이라고 할 수 있습니다.
👀 완화 연산
Relax(u, v, w)
if d[v] > d[u] + w(u, v):
d[v] = d[u] + w(u, v)
∏[v] = u
⁉️ 완화의 안전성
- 귀납법을 이용한 간단한 보조정리
: 완화 알고리즘은 불변 조건인 모든 v∈V에서 d[v]≥ δ(s, v) 임을 항상 만족합니다. - 증명
: 과정의 횟수에 대한 귀납법. RELAX(u, v, w)로 생각해보면 귀납 가정에 의해 d[u] ≥ δ(s, u) 이고, 삼각 부등식에 의해 δ(s, v) ≤ δ(s, u) + δ(u, v) 입니다. d[u] ≥ δ(s, u) 이고 w(u, v) ≥ δ(u, v) 이기 때문에 δ(s, v) ≤ d[u] + w(u, v) 가 됩니다. 그러므로 d[v] = d[u] + w(u, v)로 할당하는 것은 안전합니다.
✔ DAG에서의 최단 거리
⁉️ DAGs
: 순환이 없기 때문에 음의 순환이 있을 수 없습니다.
- DAG를 위상 정렬합니다. u에서 v까지의 경로는 선형 순서에서 u가 v 전에 온다는 의미입니다.
- 위상 정렬된 정점을 한 번 훑으면서 그 정점에서 나가는 간선에 대해 완화합니다.
Θ(V + E) 시간이 걸립니다.
r의 처리 : ∞를 유지합니다. s의 왼쪽에 있는 모든 정점은 정의에 의해 ∞로 남을 것입니다.
s의 처리 : t : ∞ → 2 x : ∞ → 6
✔ 다익스트라 알고리즘
각 간선 (u, v) ∈ E에 대하여, w(u, v) ≥ 0을 가정하고, 정점의 집합 S에 최단 경로의 값이 결정된 정점만을 유지합니다. 최소인 최단 경로 어림을 가지는 u 를 V − S 집합에서 반복적으로 선택하여, u 를 S 에 넣고, u 로부터 나가는 모든 간선에 대해 완화합니다.
⁉️ 의사 코드
- 전략
: 다익스트라는 탐욕 알고리즘입니다. V-S에서 가장 가까운 정점을 선택하여 집합 S에 넣습니다. - 타당성
: 중요 관찰점은 집합 S에 정점 u가 추가될 때마다 d[u]=δ(s, u)가 된다는 것입니다.
⁉️ 다익스트라의 복잡도
- Θ(V) 번의 우선순위 큐 삽입 연산
- Θ(V) 번의 EXTRACT-MIN 연산
- Θ(E) 번의 DECREASE-KEY 연산
⁉️ 배열을 이용한 구현 : Θ(V · V + E · 1) = Θ(V^2+E ) = Θ(V^2 )
- Θ(V ) : 최소의 원소 추출
- Θ(1) : 키 감소 연산
⁉️ 이진 최소 힙을 이용한 구현 : Θ(V lgV + ElgV )
- Θ(lgV ) : 최소의 원소 추출
- Θ(lgV ) : 키 감소 연산
⁉️ 피보나치 힙 : Θ(V lgV + E)
- Θ(lgV ) : 최소의 원소 추출
- Θ(1) : 키 감소 연산 분할상환 비용
반응형
'프로그램 개발 > 미분류' 카테고리의 다른 글
[MIT] 파이썬을 이용한 알고리즘의 이해 - 최단 경로 4 : 다익스트라 가속화 (1) | 2022.11.11 |
---|---|
[MIT] 파이썬을 이용한 알고리즘의 이해 - 최단 경로 3 : 벨만 포드 (0) | 2022.11.10 |
[MIT] 파이썬을 이용한 알고리즘의 이해 - 최단 경로 1 : 도입 (0) | 2022.11.07 |
[MIT] 파이썬을 이용한 알고리즘의 이해 - 그래프 2 : 깊이 우선 탐색 (0) | 2022.11.04 |
[MIT] 파이썬을 이용한 알고리즘의 이해 - 그래프 1 : 너비 우선 탐색 (0) | 2022.11.02 |