bfs dfs 예제

이 속성이 유용한 이유의 예로, 다음 사실을 증명해 봅시다: 그래프 G에서 G는 적어도 k. 또는 G에는 O(kn) 가장자리가 있습니다. 이 예제에서는 DFS와 BFS 간의 또 다른 차이점을 보여 줍니다. DFS에서는 하나의 경로를 따라 검색한 다음 막다른 길에 도달하면 “역추적”합니다. BFS를 사용하면 경로를 따라 탐색하는 것이 아니라 가능한 여러 경로를 한 번에 탐색하고 있습니다. 막다른 길에 도달하면, 우리는 그 방향으로 검색을 멈추고 국경에 있는 다른 어떤 것에도 집중합니다. 국경이 연못의 잔물결처럼 확장되는 방법을 확인합니다 – 먼저 1이 추가됩니다. 모든 1을 처리하면 모든 2가 국경에 추가됩니다. 타이 브레이킹은 여전히 영향을 미칩니다, 예를 들어 모든 5의 처리 될 수 있습니다,하지만 우리의 타이 브레이킹 전략은 5의 첫 번째로 처리 될 최종 노드를 일으키는 경우 는 유일한 5 탐구 될 것입니다. 또한 이 미로에서 시작부터 끝까지 길이 5의 여러 경로가 있습니다. 동점 분리 메커니즘은 궁극적으로 이러한 경로 중 어느 경로가 발견되는지 결정합니다: BFS와 DFS는 모두 간단한 알고리즘이며 매우 유사합니다. 두 알고리즘을 모두 통해 특정 조건과 일치하는 노드를 찾을 때까지 개별 노드를 하나씩 탐색합니다.

예를 들어, 3 용기 문제에서 조건은 용기 중 하나가 6 갤런의 물을 가지고 있다는 것입니다. Google 지도에서 조건은 특정 위치를 나타내는 노드를 찾는 것입니다. 이 섹션의 나머지 부분에서는 그래프 검색을 탐색하는 데 도움이 되는 그래프로 2D 미로를 모델링할 예정입니다. 여기에 우리의 간단한 미로입니다 : 그래프의 인접 성 목록은 다음과 같습니다 : 여기 `s`는 0 또는 소스 노드로 간주됩니다. 약간의 주의를 기울여 BFS와 DFS가 서로 거의 동일하게 보이게 할 수 있습니다 (예를 들어, Prim`s와 Dijkstra의 알고리즘이 서로 비슷합니다): 분명히 이것은 매우 간단한 미로입니다 – 단순함은 그래프 검색에 집중하는 데 도움이 될 것입니다. 우리의 미로에는 시작 세포, 끝 세포, 많은 빈 세포 및 셀에 채워진 것으로 표현된 벽이 있습니다. 그래프로, 각 빈 사각형은 노드이며 위의 노드에만 가장자리가 있습니다, 아래, 왼쪽, 그것의 오른쪽. 사각형으로 채워진 것은 벽이며 그래프에서 완전히 제외됩니다. 즉, 모든 노드는 측면 또는 가장자리가 적은 벽 옆에 노드가 있는 최대 4개의 모서리를 갖습니다. 이 문제에서 그래프 검색의 목표는 시작 노드에서 끝 노드까지의 경로를 찾는 것입니다. 균형 이진 트리의 높이는 O(Log n)입니다. 비뚤어진 트리에 대해 최악의 경우 발생하며 최악의 경우 높이가 O(n)가 됩니다.

여분의 공간의 측면에서 어떤 차이가 있습니까? 필요한 추가 공간의 측면에서 차이가 있습니다. BFS이름에서 알 수 있듯이 다음과 같이 그래프를 폭넓게 탐색해야 합니다.