Q&A 13주차
- d) 10 (0이 리프노드가 되려면 0을 나중에 추가해주면 되기에)
- 0 노드를 제외하고 minimum spanning tree를 돌리고 0을 추가해주면 됨
- c) 99 (100개의 노드가 순서대로 연결되어 있다고 생각하면 weight가 1인 edge가 99개이므로 99가 정답
- d) (b,c) w:4 ↔ (a,c) w:3 둘의 순서가 바껴야 됌
- Kruskal 알고리즘 : 사이클이 없음, 그 순간의 최소한의 비용
- 사이클 있는지 확인하는 법 : backward edge가 있으면 사이클 존재함
- c) 10(a,b) + 16(c,d) + 7(d,e) + 36 (선택이 안 됐다는 것은 가중치가 더 크다는 얘기이므로 값을 설정할 수 있다.)
- minimum spanning tree 이용해서 풀면 됌!
- 최소 신장 트리에서 트리안에 없는 엣지를 하나 추가하면 → 사이클이 무조건 발생함 → 그 후 사이클 안에 있는 엣지들 중 가장 큰 weight값을 지닌 엣지를 하나 삭제해준다.
- a) Greedy algorithm (그 순간에 가장 작은 코스트를 지니는 곳으로 이동하기에)
- a) false (둘이 same) b) false (entire network가 아님) c) false d) True
- 화살표를 따라가며 노드에 도달하는 가중치를 최솟값으로 계속 갱신해나가면 된다.
- b) Graphs having negative weight function
- 왜? 돌아갈 때 음수 가중치가 있다면 돌아가는 게 더 코스트가 적게 들 수 있게 되기에 (양수 가중치만 있다면 돌아가는게 무조건 코스트 더 많이 듦)
- a) 조금만 직접 계산해보면 확인할 수 있음
- No, 다익스트라 → 경로를 거친 노드들의 가중치 합으로 계산이 됨 But, 미니멈 스패닝 트리는 경로 상의 노드들을 한 번만 들르면 되기에 코스트의 합이 아니라 단순히 2개의 노드사이의 가중치만 신경 쓰면 되기 때문에 2가지 방법이 다를 수 있음.
- A,C : 3 / A,B : 2 / B,C : 2 이 경우에 다르다는 것을 보여줄 수 있음
- 벨만포드 vs 다익스트라
- 다익스트라는 이동할 간선에 대해서만 계산과 갱신
- 벨만포드는 모든 간선에 대해서 계산과 갱신
25강 All-Pairs Shortest Paths
-
모든 정점에 대하여 다른 정점으로 가는 최단 거리(최소 가중치 합)을 구하는 방법 (표를 이용해 구현)
- 벨만포드 알고리즘을 각 정점에 대하여 실행시키면된다.
- 음수 가중치가 없다면 다익스트라 알고리즘을 실행할 수 있다.
- O(V^2 * E) → 그래프가 밀집되어 있으면 E = Θ(V^2)
- 다익스트라 binary heap 이용 → O(VElgV), 피보나치힙 이용 → O(EV + V^2lgV)
- 특수한 데이터 구조 외에 모든 케이스에 대하여 **O(V^3)**안에서 다룰 것이다.
-
전체 n개의 정점이 있다고 가정하면 shortest path distance (u,v)를 n*n 행렬로 표현할 것이다.
- 가중치는 i와 j의 조건에 따라 다르게 설정된다.
- W도 행렬로 표현 → 이를 이용해 동적프로그래밍처럼 표를 이용해서 문제를 해결한다!

- path p는 i → j의 최소 엣지를 m개 갖는 최단 거리라고 하자

- Lij(m)은 최소 m개의 엣지를 포함하는 i ~> j 의 최단 경로의 최소 가중치 합을 의미한다.

-
The Floyd-Warshall algorithm 플로이드 워셜 알고리즘
- 음수 가중치는 ok, 음수 가중치 사이클은 No!
- path p가 있다면 p를 구성하는 정점 중에 source, sink를 제외한 즉, 거쳐가는(intermediate) 집합 S을 찾아냄
- i → j까지의 최단 거리에서 {1,2,3,…,k} 중에서 거치는 모든 정점을 선택했을 때 최소 가중치 합이 dij(k)를 의미한다.
- k는 정점의 수와 같고 index가 k보다 클 수 없다.

- k가 만약 경유정점(intermediate)이 아니라면 P : i → j의 경유정점으로는 1,2,…,k-1 중에 선택될 것이다.
- k가 만약 경유정점이라면 P를 구성하는 p1, p2로 나눴을 때 p1, p2의 경유정점으로 k가 선택될 수 없다(경유정점으로 2번 선택되었다는 것은 사이클이 존재한다는 것)
- p1, p2의 경유정점은 1,2,…,k-1 중에 선택될 것이다.


-
최단 경로를 구축하는 과정
- πij(k)는 1,2,3,…,k 중에 거치는 정점으로 하여금 i → j의 경로의 j 정점 바로 이전 정점을 의미한다.
- πij(k)

- D(1)~D(n)까지 해주면 모든 경로에 대해 최소의 가중치 합을 찾을 수 있음!





- SLOW-ALL-PAIRS-SHORTEST PATHS(W)
- 플로이드워셜 알고리즘