플로이드 워셜(Floyd-Warshall) 알고리즘
개발/알고리즘2023. 10. 11. 12:57플로이드 워셜(Floyd-Warshall) 알고리즘

1. 플로이드 워셜(Floyd-Warshall) 이 알고리즘은 동적 계획법의 한 예로, 로버트 플로이드가 1962년에 현재 알려진 형태로 발표했다고 한다. 하지만 본질적으로는 1956년 클레이니 알고리즘, 1959년 버나드 로이의 알고리즘, 1962년 스티븐 워셜 알고리즘과 밀접한 관련이 있다. 따라서 이 알고리즘은 플로이드-워셜 알고리즘, 로이-워셜 알고리즘, 로이-플로이드 알고리즘, 또는 WFI 알고리즘으로 불린다고 한다. 플로이드 워셜 알고리즘은 "모든 최단 경로를 구하는 알고리즘"이다. 한 번 실행하여 모든 노드 간 최단 경로를 구할 수 있다. 그러나 플로이드 워셜 알고리즘의 시간 복잡도는 O(n^3)이다. 즉, 그래프의 크기가 작아 세제곱 시간 알고리즘을 적용해도 문제가 풀리는 경우에만 사용이 ..

깊이 우선 탐색(DFS), 너비 우선 탐색(BFS)
개발/알고리즘2023. 7. 25. 13:05깊이 우선 탐색(DFS), 너비 우선 탐색(BFS)

1. 깊이 우선 탐색 (DFS) 1.1 개념탐색 시작 노드로부터 한 방향으로 나아가 마지막 노드를 찍고 다음 분기로 넘어가는 것.위 방법을 통해 해당 분기를 완벽하게 탐색하는 방식. 1.2 동작 방식1. 탐색 시작 노드를 스택에 넣고 방문(BooleanArray[node] = true) 처리를 한다.2. 최상단 노드 인근에 방문하지 않는 노드가 있다면 해당 노드를 스택에 넣으며 방문처리를 한다. - 인접 노드가 여러 개 있다면 번호가 낮은 순으로 처리 - 인접 노드가 전부 방문한 노드라면 최상단 노드 꺼내기3. 2번의 과정을 더 이상 수행할 수 없을 때까지 반복. 1.3 적용1. 길 찾기2. 미로3. 경로의 특징을 저장해야하는 경우 1.4 구현val dfsList = mutableListOf()fun d..

image