DFS(Depth-First Search)와 BFS(Width-First Search)는 언제 사용할 수 있습니까?

DFS와 BFS의 차이는 이해하지만, 어느 쪽이 다른 쪽을 사용하는 것이 더 실용적인지 알고 싶습니다.

DFS가 BFS를 능가하고 그 반대인 예를 들어줄 수 있는 사람이 있을까요?

질문에 대한 의견 (5)
해결책

이는 검색 트리의 구조와 솔루션 수 및 위치에 따라 크게 달라집니다(검색된 항목이라고도 함).

  • 솔루션이 트리의 루트에서 멀지 않은 곳에 있다는 것을 알고 있다면 BFS(width first search)가 더 나을 수 있습니다.

  • 트리가 매우 깊고 솔루션이 드문 경우 깊이 우선 검색 (DFS)는 매우 오랜 시간이 걸릴 수 있지만 BFS가 더 빠를 수 있습니다.

  • 트리가 매우 넓으면 BFS에 너무 많은 메모리가 필요할 수 있습니다. 완전히 비현실적일 수도 있어요

  • 솔루션이 빈번하지만 트리의 깊숙한 곳에 있는 경우 BFS는 비실용적인

  • 검색 트리가 매우 깊으면 검색을 제한해야 합니다. 깊이 우선 검색(DFS)을 위한 깊이(예: 반복 심화).

하지만 이는 경험의 법칙에 불과하기 때문에 실험이 필요할 수도 있습니다.

해설 (4)

깊이 우선 탐색

깊이 우선 검색을 종종 사용되는 시뮬레이션 게임 (및 게임 같은 경우 실제). 일반적으로 몇 가지 액션 게임 중 하나를 선택할 수 있습니다. 각 항목을 선택할 수 있습니다, 이로 인해 더욱 강화하기 위해 각 선택값, 등드으로 를 이처럼 모양의 그래프를 가능성.

! [입력하십시오. 이미지 여기에 설명을] [1]

예를 들어, 같은 체스 게임에서는 상상도 할 수 있습니다, 정신적으로 어떤 움직이십시오 틱택토 결정할 때는 상대의 대응 방안, 이동, 그런후에도 너회의 그런후에도 너회의 대응 방안과 드릴링됩니다. 어떻게 할 수 있는 가장 좋은 결과를 보고 결정할 수 있습니다) 가 이동할 수 있습니다.

일부 내용만 트리별 주관업체로 패스이므로 경기에서 이길 수 있습니다. 일부 이어질 때, 상대방이 이를 이겨야 합니다 같은 기간말 백업하십시오 이전 노드입니다 및 시도해보십시오 또는 백트랙, 다른 경로를. 이 방법을 사용하여 경로를 찾을 때까지 나무를요 살펴보았으므로 성공적인 "고 밝혔다. 그리고 이 경로를 따라 첫 번째 이동 할 수 있습니다.

너비 우선 탐색

너비 우선 탐색 () 는 이 흥미로운 속성: 먼저 한 다음, 멀리 있는 모든 정점 모서리까지 aspt 시작점이 있는 두 개의 모서리, 그리고 모든 정점 빼냅니다 드릴링됩니다. 이 때문에 최단 경로를 찾는 경우에는 시작 단계에서 특정 교점까지의 교점까지의. Bfs 시작할 때, 당신이 알고 있는 경로를 찾을 경우, 지정된 교점까지의, 지금까지 발견된 가장 짧은 경로를 는 노드입니다. 이 경우 최단 경로를 찾을 수 있을 것으로, BFS 이미.

너비 우선 탐색 찾는 이웃이 노드입니다 토렌트 p2p 네트워크를 사용할 수 있으며, GPS 시스템, 소셜 네트워킹 사이트 같은 위치를 찾을 수 있는 사람을 찾기 위한 거리 및 창조하셨노 지정한 것을 좋아한다.

해설 (0)

니스 (nice) 에서 것이다. http://www.programmerinterview.com/index.php/data-structures/dfs-vs-bfs/

&gt. 예를 들어, BFS

다음은 어떤 BFS 참고하십시오. 이 같은 일이 바로 여기서 우리가 사용할 수 있는 수준을 트리 순회 주문하십시오 대기열은 반복적인 외곽진입 (주로 반복 될 것이라고 up with DFS). 순서를 나타내는 숫자는 노드입니다 받을시간은 액세스됩니다 BFS:

enter 이미지 여기에 설명을!

깊이 있는 첫 번째 검색, 트리의 루트, 준수하십시오 시작한 선수단 중 분기로서의 노드입니다 또는 사용자가 찾고자 하는 발견될 때까지 최대한 멀리 인컨텍스트 쳐서 리프 노드 (node) 와 자녀는 없다). 그런 경우 리프 노드) 가 남아 있는 가장 가까운 조상 http://community. 계속할 수 있다.

&gt. 예를 들어, DFS

예를 들어 보겠습니다 뭐한테 DFS 참고하십시오. 이진 트리 순회 주문하십시오 리프 레벨 1 에서 작동합니까 게시물로의 시작할 것이라고 생각한다. 순서를 나타내는 숫자는 노드입니다 받을시간은 액세스됩니다 DFS:

enter 이미지 여기에 설명을!

&gt. Dfs 차이점 및 BFS

Bfs 비교 및 DFS, 가장 큰 장점은 DFS 비해 훨씬 낮은 메모리 요구 조건을 갖췄다는 점도 BFS 있기 때문에 모든 자식 포인터를 저장하는 데 필요한 것은 각 레벨에서. 그리고 어떤 데이터에 따라 찾고 있고, DFS 또는 BFS 유리할 수 있다.

예를 들어, 패밀리 트리 주어진 경우 누가 살아 있는 사람을 찾고 있었는데, 그런 사람이 될 수 있는 안전한 solaris. 진단트리에서 약간만이라도 바닥에 진단트리 즉, BFS 매우 오랜 시간이 걸릴 것이라고 도달할 수 있는 마지막 수준. 그러나 목표를 찾을 것이라고 DFS 가속화합니다. 그러나 한 가족이 숨진 경우 찾고 있었는데, 그 사람이 아주 오래 전 약간만이라도 (closer to the top of the tree. 그런 다음, BFS DFS 보다 일반적으로 볼 수 있습니다. 따라서 데이터 및 너희는너희가 찾는 중 장이점이 따라 달라질 수 있습니다.

한 번 더 비유하사 페이스북. 프렌즈 (friends of 제안했다. 여기서 우리가 사용할 수 있는 친구들을 제안으로 BFS 즉시인지 필요하다. 최단 경로를 찾을 수 있습니다 (사용 반복) 또는 감지할 수 있는 사이클입니다 DFS 사용할 수 있습니다.

해설 (6)

Width First Search는 일반적으로 트리의 깊이가 다를 수 있으며 트리의 일부만 검색하면 해결 방법을 찾을 수 있는 최선의 방법입니다. 예를 들어 시작 값에서 최종 값까지의 최단 경로를 찾는 것이 BFS를 사용하는 좋은 방법입니다.

깊이 우선 검색은 트리 전체를 검색해야 할 때 일반적으로 사용됩니다. BFS보다 구현(재귀 사용)이 쉽고 상태 요구도 적습니다. BFS는 전체 'frontier'를 저장해야 하지만, DFS는 현재 요소의 상위 노드 목록만 저장하면 됩니다.

해설 (0)

DFS는 BFS보다 공간 효율이 높지만 불필요한 깊이까지 도달할 수 있습니다.

그 이름에서 알 수 있습니다.폭은 넓지만 깊이는 매우 한정되어 있는 경우(예: 제한된 수의 이동 및 인용), DFS가 BFS보다 선호될 수 있습니다.


IDDFS에서

DFS의 공간 효율성을 결합하는 덜 알려진 변종도 있지만, (추천적으로) BFS의 수준별 방문은 심도 우선 탐색(deepth-first search))이라는 점을 언급해야 한다. 이 알고리즘은 일부 노드를 재점검하지만 점근적 차이의 일정한 요인만 제공합니다.

해설 (1)

한 때 이 질문에 비호환성의 프로그래머용 팩터에서의 아웃해야 외곽진입 있다. # 39 는 re 사용하는 경우, 반복, 그리고 깊이 우선 탐색 you& 간단해진다는 # 39, t need to 추가로 구축할 수 있는 데이터 구조를 유지할 수 있기 때문에 don& 노드를 탐색할 수 있다.

39 에 대해 깊이 우선 탐색 here& 무방향성 you& # 39 의 경우, "이미 방문한" 정보를 저장하는 노드입니다 그래프화합니다 re:

def dfs(origin):                               # DFS from origin:
    origin.visited = True                      # Mark the origin as visited
    for neighbor in origin.neighbors:          # Loop over the neighbors
        if not neighbor.visited: dfs(next)     # Visit each neighbor if not already visited

"이미 방문한" 정보를 저장하는 경우 별도의 데이터 구조:

def dfs(node, visited):                        # DFS from origin, with already-visited set:
    visited.add(node)                          # Mark the origin as visited
    for neighbor in node.neighbors:            # Loop over the neighbors
        if not neighbor in visited:            # If the neighbor hasn't been visited yet,
            dfs(node, visited)                 # then visit the neighbor
dfs(origin, set())

이와 함께 별도의 데이터 구조를 유지하는 데 필요한 곳에 대조합니다 너비 우선 탐색 목록니다 노드입니다 아직 dell., 아무리 생각해도.

해설 (0)

한 가지 중요한 BFS 약간만이라도 최단 경로를 찾는 데 사용할 수 있다는 것을 이용하여 임의의 두 노드 사이에 비가 작업공간에서 그래프화합니다. 반면에, 우리 DFS 를 사용할 수 없는 동일한.

해설 (0)

예를 들어, BFS 위한 페이스북 고려해 볼 만하다. 우리가 받은 친구 추가 FB 에서 프로파일만을 제안에 다른 친구 프로파일입니다. 예를 들어, E, F, B, 동시에 A-&gt B-&gt B-&gt 대한 건의 사항을 얻을 수 있어야 하므로, E, f, BFS 인도되니 사용하여 두 번째 읽을 수 있는 수준이다. DFS 를 기반으로 한 것이라는 시나리오가 더 많은 데이터를 기반으로 소스에서 타겟으로의 우리는 뭔가 싶다. 이미 언급한 바와 같이 대한 체스 또는 스도쿠. 나는 생각한다, 다른 한 가지는 슬라이드에서는 DFS 최단 경로를 커버할 수 있기 때문에 전체 경로 우선 사용해야 합니다 하나님이 결정할 수 있는 최고라니까요 DFS 그러나 BFS 사용할 수 있어 마치 greedy& # 39 의 외곽진입 최단 경로, 하지만 그 최종 결과가 다를 수 있습니다. 알려주세요 표시할지를 내 잘못 알고 있다.

해설 (1)

Dfs (또는 BFS) 의 일부 알고리즘을 특정 속성을 달려 있는 것이다. 예를 들어, 각 구성 요소를 찾는 호프크로프트 및 트라야누스 알고리즘입니다 2 접속됨 활용하여 사실을 이미 방문한 노드입니다 경로에서 발생하는 dfs 는 현재 루트로부터의 개척한 노드입니다.

해설 (0)

다음은 너희는너희가 asking. 포괄적인 될 수 있다.

간단히 말해.

첫 번째 검색 알고리즘을 breadth (BFS), 검색, 모든 이웃 노드 Breadth&quot &quot 변경분이 이름, through the out) 가 그 노드의 가장자리들을 방문하지 않은 이웃 등, 앞에서 언급한 이웃 통해 접속할 수 있는 모든 노드에 인도되니 아웃해야 가장자리들을 &solarisdvd 오리지오날 방문해 소스 (저희에게는힘과 계속할 수 있으면 다른 소스 및 시행하십시오 오리지오날 방문하지 않은 나머지 노드와 등). # 39 에 왜 that& 최단 경로를 찾는 데 사용할 수 있습니다 (있는지) 에서 노드 (오리지오날 소스) 의 경우 다른 노드로 급지합니다 모서리는 유니폼을 입게 됐다.

첫 번째 검색 (DFS),, Depth&quot &quot 알고리즘입니다 깊이까지의 변경분이 이름) 가 가장 최근에 발견된 노드입니다 x 통해 이웃 방문하지 않은 아웃해야 모서리입니다. 이 알고리즘은 x 에서 방문하지 않은 노드입니다 역 추적, 이웃이 없으면 검색할 수 있는 기호표 노드입니다 x 의 방문하지 않은 이웃 노드 (통해 아웃해야 가장자리들을) 에서 발견된 모든 노드에 인도되니 오리지오날 방문해 소스 등과 연결할 수 있다 (we 계속할 수 있으면 다른 소스 및 시행하십시오 오리지오날 방문하지 않은 나머지 노드와 등).

Bfs 및 DFS 모두 불완전한 수 있습니다. 예를 들어, 분기 계수를 노드입니다 제한이 없으므로, 매우 큰 자원 (메모리) 지원 (예를 들어 다음 노드를 검색할 수 저장할 때) 한 후, BFS 완료되지 않은 경우에도 검색할 수 있는 몇 가지 주요 거리에서 가장자리들을 오리지오날 소스. 이 때문에 무한 무한 선택항목을 (이웃 노드) 에서 분기 계수를 주어진 노드입니다 검색할 수 있습니다. 자원 (메모리) 는 formula_63 의 경우, 매우 큰 깊이까지의 지원 (예를 들어 다음 노드를 검색할 수 저장할 때) 한 후, DFS 완료되지 않은 경우에도 3 의 주요 검색할 수 있는 이웃 오리지오날 소스. 이 때문에 무한 깊이 있는 상황에서 모든 노드를 검색할 수 있어, 적어도 알고리즘입니다 새로운 선택 (이웃 노드) 즉 방문하지 않은 합니다.

따라서 사용 시기 및 DFS BFS 결론을 내릴 수 있습니다. 예를 들어, 우리가 겪고 있는 분기 계수를 관리 가능한 제한 및 관리 가능한 제한된 심도입니다. 검색할 수 있는 경우 (즉, 노드는 소스, 그 후 일부 가장자리들을 얕은 오리지오날 bfs 를 사용하는 것이 좋습니다. 반면 검색할 경우 노드는 소스, 그 후 수 많은 가장자리들을 깊이형 즉 오리지오날 DFS 를 사용하는 것이 좋습니다.

예를 들어, 만약 우리가 비슷한 관심사를 가진 사람들이 소셜 네트워크 검색할 수 있고, 이를 통해 특정 사람 한 사람이 될 수 있기 때문에, BFS 적용하십시오 표시됨과 오리지오날 대부분 이 친구의 친구 또는 친구들과 직접 소스 (즉, 하나 또는 두 개의 가장자리들을 아니다. 반면, 우리가 가진 사람들이 이익을 검색할 수 있고, 이를 통해 특정한 사람에게 완전히 다른 사람이 될 수 있기 때문에, DFS 적용하십시오 표시됨과 오리지오날 대부분 이 사람들이 그를 매우 먼 소스 (즉, 친구의 친구의 친구. 즉, 너무 많은 가장자리들을 아니다.

또한 응용 프로그램 및 DFS BFS 때문에 각 메커니즘의 한 검색: 다를 수 있습니다. 예를 들어, BFS 중 하나를 이용할 수 있다 (단 분기 계수는 관리성이 좋은) 또는 도달가능성 때 우리는 그냥 dfs 사용한다고 가정할 때 관리가 용이한 깊이까지의) 를 확인할 수 없기 때문에 다른 한 노드에서 정보 노드입니다 위치를 확인할 수 있습니다. 또한 같은 둘 다 동일한 작업을 해결할 수 있는 위상 정렬을 그래프란다 (있으면). BFS 최단 경로를 찾는 데 사용할 수 있는 장치 무게 가장자리들을 노드입니다 (오리지오날 소스) 에서 다른. 반면, DFS 데 사용할 수 있는 모든 선택항목을 배출 될 것 같은 긴 경로를 발견하고 심도 있는 상태였기 때문에, 두 노드 사이에 있는 비순환 그래프. Dfs 를 사용할 수 있습니다 또한 사이클입니다 탐지는 그래프란다.

결국 우리는 무한 반복 심화 깊이 경우 검색 (IDS), 무한 분기 팩터도 이용할 수 있다.

해설 (0)

Dfs 및 속성에 따라 BFS. 예를 들어, 최단 경로를 찾는 싶다.

39, & # 39 보장받을 수 있으며, 우리는 대개 bfs shortest&;.

그러나 이 시점에서 우리가 할 수 있는 달성할 수 있다고 장담할 수 있을 뿐 dfs 따라오렴 shortest& # 39, & # 39 점, 보장 못한다.

해설 (0)

어떤 문제를 안고 있는 것 같아 달려 있습니다.

단순 &gt, 최단 경로 그래프 - 1. bfs 2. &gt 가능한 모든 결과 -; dfs 3. 검색 그래프 (treat 트리에서만 매트릭스 tpc. 그래프란다 너무) - &gt. dfs .

해설 (1)

깊이 우선 검색을 사용할 때, 처리되기 때문에 스택할 노드입니다 퇴각검색 DFS 제공됩니다. 너비 우선 검색 스택, 큐, 추적할 수 있기 때문에 사용하지 않는 뭐한테 노드입니다 처리되지 않은 퇴각검색, BFS 제공됩니다.

해설 (0)

Dfs 사용할 때 진단트리는 폭은 매우 크고 농도가 낮은 않을 것처럼 스택할 반복이 오버플로입니다. Bfs 사용할 때 매우 큰 폭, 깊이 나무를요 트래버스합니다 낮다.

해설 (0)

사용되고 있을 상황에 따라 다릅니다. 우리는 이 문제를 그래프란다 탐색, 해야 할 때마다 특정 목적을 위해. 문제가 발생했을 때 최단 경로를 찾을 수 있는 경우, BFS 는 이분 그래프 (graph) 또는 발견사항 비가 그래프란다 이용할 수 있다. 퇴각검색 필요로 하는 의 처리 문제에 대한 인식 또는 어떤 논리와, DFS 사용할 수 있습니다.

해설 (0)

이 경우 DFS 어떤 것보다 더 나은 BFS 있음을 알려주는 좋은 예다. https://leetcode.com/problems/01-matrix/

제대로 할 때 보다 더 멀리 있는 거리, 두 솔루션은 현재 셀입니다 구현됩니까 dell. 셀입니다 +1. 그러나 여러 차례 방문한 결과 O ( *) 및 DFS 비효율적임 동일한 셀 수 있습니다.

예를 들어,

1,1,1,1,1,1,1,1, 
1,1,1,1,1,1,1,1, 
1,1,1,1,1,1,1,1, 
0,0,0,0,0,0,0,0,
해설 (0)