2021년 10월 22일 금요일

Algorithm.Dijkstra Algorithm

 

Algorithm.Dijkstra Algorithm

[Visual Studio과 C#으로 구현/최적화문제해결]

Algorithm Dijkstra Algorithm Coding // Week07

20211022_20615034


[ Dijkstra Algorithm Coding_Theory ]


Dijkstra Algorithm은 다익스트라 알고리즘이라고 읽으며, 
최단 경로를 찾는 가장 대표적인 알고리즘이다.


주어진 출발점에서 시작, 출발점으로부터 최단거리가 확정되지 않은 점들 중에서 출발점으로부터 가장 가까운 점을 추가하고, 그 점의 최단 거리를 확정한다.




<알고리즘 과정>

ShortestPath(G, s) 
입력 : 가중치 그래프 G, 시작 점 s
출력 : 출발점 s로부터 n-1개의 점까지 각각 최단 거리를 저장한 배열 D


1) 배열 D의 각 요소를 무한으로 초기화시킨다. D[s]=0으로 초기화한다.

2) while(s로부터의 최단 거리가 확정되지 않은 점이 있으면) {

3) 현재까지 s로부터 최단 거리가 확정되지 않은 각 점 v에 대해서 최소의 D[v]의 값을 가진 점 Vmin을 선택하고, 출발점 s로부터 점 Vmin까지의 최단 거리 D[Vmin]을 확정한다.

4) s로부터 현재보다 짧은 거리로 점 Vmin을 통해 우회 가능한 각 점 w에 대해서 D[w]를 갱신한다.}

5) return D;








자료구조의 구성은 총 3개의 배열이다.
Vertex의 이름을 담는 배열 city, 최소 경로 탐색이 끝난 점을 표시하는 bool배열 sptSet,
해당 점까지의 최소 경로의 가중치를 담는 배열 D이며, 최종적으로는 D를 출력하게 된다.




<시간 복잡도>

while루프가 (n-1) 번 반복되고 1회 반복될 때, 내부에는 최소의 D[v]를 가진 점 Vmin을 찾는데 걸리는 O(n), Vmin와 연결되어, 우회할 경우 기존의 최소 가중치보다 낮은지 탐색하고 최소 가중치를 D[w]에 갱신하는데 걸리는 O(n) 이 걸린다. 따라서 O(n-1) { O(n)+O(n) } = O(n2) 이라고 할 수 있다.



<실행화면 01>


<실행화면 02>










댓글 없음:

댓글 쓰기