깊이우선탐색 예제 속시원내과 | 2019년 8월 3일

깊이 우선 검색은 위상 분류, 스케줄링 문제, 그래프의 사이클 감지, 미로 또는 스도쿠 퍼즐과 같은 하나의 솔루션으로 퍼즐을 해결하는 데 사용됩니다. 다른 응용 프로그램에는 네트워크 분석(예: 그래프가 이원적인지 테스트)이 포함됩니다. 깊이 우선 검색은 포드-풀커슨 알고리즘과 같은 네트워크 흐름 알고리즘의 서브루틴으로 자주 사용됩니다. 깊이 우선 검색(DFS)은 트리 또는 그래프 데이터 구조를 트래버스 또는 검색하기 위한 알고리즘입니다. 알고리즘은 루트 노드에서 시작하여(그래프의 경우 임의의 노드를 루트 노드로 선택) 역추적하기 전에 각 분기를 따라 가능한 한 멀리 탐색합니다. 내가 일반적으로 취하는 경로와 GPS가 가장 짧은 것으로 보이는 경로에는 아마도 사용되는 알고리즘으로 인해 차이가 있습니다. 나는 내 그래프 이론 데이터 구조 클래스에서 배운 (BFS) 폭 첫 번째 검색 예는 GPS 네비게이션 및 디지털지도입니다. 웹에서 GPS 네비게이션에 사용되는 알고리즘 (너비 우선 검색 예제 또는 A * 응용 프로그램)의 가능한 사용을 찾으려고했지만 많은 세부 사항을 찾을 수 없었습니다. 그래서 여기에 폭 첫 번째 검색GPS와 같은 실제 응용 프로그램에서 사용되는 방법입니다. 이제 GPS 네비게이션이 경로 A, E, I, M, N, O, P 또는 A, B, C, D, H, L, P를 제안하지 않은 이유를 이해합니다. 다음은 DFS를 재귀적으로 또는 비재귀로 구현하는 의사 코드 및 파이썬 코드의 예입니다.

이 알고리즘은 일반적으로 스택을 사용하여 방문한 노드를 추적합니다. 깊이 우선 검색은 모든 정점을 한 번 방문하고 그래프의 모든 가장자리를 한 번 검사합니다. 따라서 DFS 복잡성은 O(V+E)O(V + E)O(V+E)입니다. 그래프가 인접 목록으로 표시된다고 가정합니다. 깊이 우선 검색은 많은 사람들이 자연스럽게 미로와 같은 문제를 해결하는 일반적인 방법입니다. 첫째, 우리는 미로에서 경로를 선택 (예를 들어, 우리가 미리 배치 몇 가지 규칙에 따라 경로를 선택하자) 우리는 막다른 길에 도달하거나 미로의 마무리 지점에 도달 할 때까지 우리는 그것을 따릅니다. 지정된 경로가 작동하지 않으면 과거 교차로에서 뒤로 추적하고 다른 경로를 취하고 해당 경로를 시도합니다. 다음은이 미로를 해결하기위한 DFS 접근 방식의 애니메이션입니다. 깊이 우선 검색은 경로 매핑, 스케줄링 및 스패닝 트리 찾기에 사용됩니다.

여기에 GPS 네비게이션에서 폭의 사용을 설명하는 비디오를 시청 – 그러나 GPS 네비게이션 또는 다른 디지털지도세그먼트의 수백으로 분할, 일부만 24 미터 길이. GPS는 이 거리를 정점과 가장자리로 나눈 그래프로 봅니다. 깊이 우선 검색은 다른 복잡한 알고리즘의 서브루틴으로 자주 사용됩니다. 예를 들어 일치하는 알고리즘인 Hopcroft-Karp는 DFS를 알고리즘의 일부로 사용하여 그래프에서 일치하는 것을 찾는 데 도움을 줍니다. DFS는 트리-세일즈맨 문제 및 Ford-Fulkerson 알고리즘에 응용 프로그램이 있는 트리 탐색 알고리즘에도 사용됩니다. 깊이 우선 검색의 주요 전략은 가능하면 그래프를 더 깊이 탐구하는 것입니다. 깊이 우선 검색은 가장 최근에 발견된 정점, sss에서 나온 가장자리를 탐색합니다. 탐색되지 않은 정점으로 가는 가장자리만 탐색됩니다. Sss의 가장자리를 모두 탐색하면 검색이 탐험되지 않은 이웃에 도달할 때까지 역추적됩니다.

Comments are closed.