[1. 문제 설명]
방향그래프에서 edge 의 weight 가 주어질 때
시작점에서 그래프 내 모든 정점에 최단 거리로 방문할 때,
모든 정점의 최단 거리 값을 출력한다.
[2. 풀이 접근]
다익스트라는 우선순위 큐를 사용하여 구현 할 경우 그 시간 복잡도는 아래와 같다
O(V + ElogV) 이며,
여기서 E 는 Edge 의 개수, V 는 Vertex 개수 이다.
heapify 에 대하여
- 처음 풀이에서 heapify 를 하여 우선순위를 재조정하는 코드가 있었다.
=> 힙에 이미 푸쉬되었지만, 다른 경로를 거쳐 오는 경우가 더 빠른 경우 가 발생할 수 있으므로 - 실행시간이 다소 늦음
=> heap 에 푸쉬된 특정 정점을 찾기 위해 O(n) 에 시간이 걸리기 때문
=> heap 은 오름/내림 차순 등으로 정렬되지 않기 때문에,
heapify 가 필요 없는 이유
- heap 에 이미 푸쉬되었지만, 다른 경로를 거쳐 오는 경우가 더 빠른 경우 가 발생 할 경우,
새로운 값으로서 heap 에 푸쉬하면 됨 - 이 때, heap 이 재조정 되며,
- 먼저 heap 푸쉬 된 값은 언젠가 pop 되지만, (1) 에서 푸쉬 된 값이 더 나은 경로를 형성하므로
자연스럽게 무시 됨 (=> 코스트가 더 높아서 인접한 정점으로 움직이지 못함)
[3. 코드]
'알고리즘 > Baekjoon' 카테고리의 다른 글
최단 경로. [13549] (0) | 2022.09.25 |
---|---|
최단 경로. [1504] (0) | 2022.09.25 |
그래프와 순회. [1707] (0) | 2022.09.21 |
그래프와 순회. [2206] (0) | 2022.09.21 |
그래프와 순회. [16928] (0) | 2022.09.19 |