너비 우선 검색에서 '너비'의 의미는 무엇입니까?


11

나는 광범위한 첫 검색에 대해 배우고 있었고 BFS가 왜 그렇게 불리는 지에 대한 의문이 생겼습니다. CLRS의 알고리즘 소개 책 에서 다음과 같은 이유를 읽었습니다.

너비 우선 검색은 검색된 정점과 발견되지 않은 정점 사이의 경계를 경계의 폭에 걸쳐 균일하게 확장하기 때문에 그렇게 명명되었습니다.

그러나 나는이 진술의 의미를 이해할 수 없다. 나는이 단어 "프론티어"와 그 프론티어의 폭에 대해 혼란스러워합니다.

그렇다면 누군가 나와 같은 초보자가 이해하기 쉬운 방식 으로이 질문에 대답 할 수 있습니까?


4
: 경우 일부 독자들은 (이 기술 용어의 일환으로 사용 이외의) 영어 단어의 의미에 익숙하지 않은 merriam-webster.com/dictionary/breadth 또는 dictionary.cambridge.org/dictionary/english/breadth . 물리적 개체의 크기 / 모양에 대해 이야기하는 경우 "깊이"와 다른 차원 인 "너비"와 비슷합니다. 그리고 지식의 깊이 (한 주제에 대한 전문가) 대 지식의 폭 (많은 주제)과 같은 은유 적 의미에서.
Peter Cordes

답변:


22

검색을 나타내는 데 사용되는 데이터 구조를 고려하십시오. BFS에서는 큐를 사용합니다. 보이지 않는 노드를 발견하면이를 큐에 추가합니다.

"프론티어"는 검색 데이터 구조의 모든 노드 세트입니다. 큐는 프론티어의 모든 노드를 순차적으로 반복 하여 프론티어 의 을 반복 합니다. DFS는 항상 스택에서 가장 최근에 발견 된 상태를 표시하므로 항상 프론티어 의 가장 깊은 부분을 반복 합니다.

아래 이미지를 고려하십시오. DFS가 트리의 가장 깊은 부분으로 곧장가는 반면 BFS는 각 수준의 폭을 반복합니다.

dfs bfs

여기 이미지


2
나는 프론티어 라는 단어 가 발견 된 노드의 가장자리를 나타낼 수 있다고 생각합니다 . 당신이 발견했을 때 a, 국경은 a입니다. 당신이 발견 한 때 a, b, c, 국경이다 b, c. 당신이 발견 한 때 a, b, c, d, e, f, g, 국경이 d, e, f, g. 다시 말해, 발견 된 노드와 아직 검색하지 않은 노드입니다.
Theodoros Chatzigiannakis

나는 이것이 공평한 지점이라고 생각하지만,“프론티어”는 위의 일반적인 설명이 여전히 작동하면서 여러 가지 방식으로 해석 될 수 있다고 생각합니다.
Throckmorton

2

당신이 제공 한 인용은 "발견 된 정점과 발견되지 않은 정점 사이의 경계"라고 말합니다. 그래서 그것은 저자가 말한 경계입니다 : 발견 된 정점과 발견되지 않은 정점 사이의 경계. 아직 아무것도 보지 못한 정점이 있습니다. 또한 모든 것을 본 정점도 있습니다. 그리고 그 사이에 정점이 있습니다. 이것들은 당신이 본 정점이지만 아직 모든 자식을로드하지 않았습니다. 이것이 프론티어입니다.

이에 대한 자세한 내용은 다음과 같습니다.

진행 상황을 추적하기 위해 BFS는 각 정점을 흰색, 회색 또는 검은 색으로 채색합니다. 모든 정점은 흰색으로 시작하여 나중에 회색이되고 검은 색이 될 수 있습니다. 정점은 검색 중에 처음 발견 될 때 발견되며, 이때 백색이 아닙니다. 따라서 회색과 검은 색 정점이 발견되었지만 BFS는 이들을 구분하여 검색이 BF 방식으로 진행되도록합니다.
...
각 정점은 처음에 흰색이고 검색에서 발견 될 때 회색으로 표시되고, 완료되면, 즉 인접 목록이 완전히 검사되면 검게 표시됩니다.

따라서 모든 정점이 흰색으로 시작됩니다 (미 발견). 노드가 발견되면 회색 (프론티어)으로 표시됩니다. 그것이 가리키는 모든 것이 발견되면 검은 색으로 표시됩니다 (완전히 발견됨). 프론티어는 발견되었지만 발견되지 않은 아이들을 가진 일련의 요점입니다.

웹 사이트에서 무언가를 찾고 있다고 가정하십시오. 먼저 메인 페이지로 이동하십시오. "동물"이라고 표시되어 있다고 가정하십시오. 국경은 현재 { "동물"}입니다. 메인 페이지를 살펴보고 원하는 것을 보지 못합니다. 그러나이 페이지에는 "사분면"및 "웜"이라는 두 페이지가 더 링크되어 있습니다. "quadrupeds"링크를 클릭하십시오. 이제 프론티어는 { "animals", "quadrupeds"}입니다. 당신은 "사분면"을 통해보고 당신이 찾고있는 것을 찾지 못합니다. 다음에 무엇을합니까? "사분면"에 대한 링크를 찾아서 따라 가거나 "동물"로 돌아가 "웜"에 대한 링크를 클릭하십시오. 첫 번째는 깊이 우선 검색이고 두 번째는 너비 우선 검색입니다.

"깊이"는 루트 노드에서 노드로 연결하는 데 필요한 링크 수를 나타내며 "폭"은 노드를 동일한 깊이로 나타냅니다. 위의 예에서 BFS는 "animals"에서 시작하여 먼저 깊이 1의 모든 노드를 확인하므로 "quadrupeds"및 "worms"를 먼저 봅니다. 모든 depth-1 노드를 살펴본 후 모든 노드에서 프론티어를 확장합니다. 즉, 깊이 2 노드의 하위 항목을보기 전에 모든 깊이 1 노드의 하위 항목을 살펴 봅니다. 예를 들어, "사분면"페이지의 링크 중 하나가 "주인"인 경우 "주인"페이지의 링크를보기 전에 "웜"페이지의 모든 링크를 살펴 봅니다.


1

2

주어진 시간에, 웨이브의 프론티어는 큐 데이터 구조에 저장된 정점입니다 (이 정점들은 방문했지만 아직 더 탐색되지는 않았습니다).

입니다.

거리 의 정점 세트케이 에서 라고합니다 케이꼭짓점에 대한 그래프의 거리 분할에서 레이어 . 정점 세트는이 레이어들의 분리 된 결합입니다(케이0). 그만큼0층은 {}첫 번째 레이어는 이웃의 집합입니다. , 두 번째 레이어는 2 등입니다. BFS 알고리즘은 특정 순서로 계층별로 그래프의 정점을 방문합니다. 각 레이어는 전체 너비를 포함하지만 서로 다른 레이어의 깊이는 다릅니다.

반면에 DFS 알고리즘은 한 방향으로 최대한 깊이 탐색합니다 (예 : 방문 첫 번째 이웃, 이웃, 이웃 등)으로 돌아 가기 전에 다음 미 탐방 이웃을 방문 . 이 알고리즘은 넓게 이웃을 방문하는 대신 먼저 진행됩니다.

따라서 DFS와 BFS는 정점을 방문하는 순서가 다릅니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.