dfs 예제

다음으로 노드 a에서 연결할 수 있는 모든 단일 노드를 다시 방문하려고 합니다. 우리가 시작하는 노드는 중요하지 않지만, 정점이 도달할 수 있고 a의 이웃 중 하나인 한 다음에 방문하는 이웃 정점도 중요하지 않습니다. 예를 들어, 다음 노드 c를 방문하도록 임의로 선택할 수 있습니다. 예를 들어 노드 A에서 시작하여 아래 방향 그래프를 검색할 때 순회 시퀀스는 A B B B A A 또는 A C C A B A(A에서 B 또는 C를 처음 방문하는 것을 선택하는 것은 알고리즘에 달려 있음)입니다. 노드에 대한 역추적 의 형태로 반복 방문하여 아직 방문하지 않은 이웃이 있는지 확인합니다(없음이 없는 것으로 확인되더라도). 따라서 가능한 예약 주문은 A B C 및 A C D B이며, 가능한 후주문은 D B C A 및 D C B A이며, 가능한 역 후주문은 A B B D 및 A B C D입니다. 다른 응용 프로그램에는 네트워크 분석(예: 그래프가 이원적인지 테스트)이 포함됩니다. 깊이 우선 검색은 포드-풀커슨 알고리즘과 같은 네트워크 흐름 알고리즘의 서브루틴으로 자주 사용됩니다. 다음은 DFS를 재귀적으로 또는 비재귀로 구현하는 의사 코드 및 파이썬 코드의 예입니다. 이 알고리즘은 일반적으로 스택을 사용하여 방문한 노드를 추적합니다. 다음은 BFS및 DFS를 사용할 때 그래프가 검색되는 순서를 비교하는 예제입니다(세 가지 방법 각각).

[2] 깊이 우선 검색은 몇 가지 다른 방법으로 설명하고 구현할 수 있으며, 적어도 DFS 알고리즘을 처음 학습할 때 모든 검색을 이해하려고 노력하는 것은 압도적일 수 있습니다. 그러나 작동 방식에 익숙해지면 DFS작동 방식의 다양한 구현과 특이성을 아는 것이 좋습니다. 이 알고리즘에 대한 심층적인 이해를 얻으려면 시작하는 데 도움이 되는 몇 가지 좋은 예제와 구현을 소개합니다. 이 두 알고리즘에 대해 기억해야 할 중요한 점은 어느 알고리즘도 반드시 다른 알고리즘보다 낫지 않다는 것입니다. 예를 들어 깊이 우선 검색은 경로가 두 노드 사이에 있는지 여부를 결정하는 데 매우 적합하며 전체 그래프를 통과하기 위해 초기화하거나 인스턴스화할 필요가 없으므로 많은 메모리가 필요하지 는 않습니다.

Share on Facebook