bfs 알고리즘 예제

그러나 이제 큐에 대해 알고 있고이 알고리즘을 구현하기 위해 큐를 사용해야한다고 확신합니다… 우리는 아마 자바 스크립트에서 그렇게하는 방법을 알아내야한다, 오른쪽? 잘, 그것은 밝혀, 그것은 JS에서 큐 와 같은 개체를 만드는 정말 쉽습니다! 다음은 프랑크푸르트에서 시작하는 독일 도시에서 BFS를 실행하여 얻은 폭 우선 트리의 예입니다: 마지막으로, 대기열에 관한 주제를 다지는 동안 BFS 알고리즘의 시공간 복잡성도 큐와 관련이 있다는 점을 언급할 가치가 있습니다. 우리가 그것을 구현하는 데 사용하는 것 – 누가 대기열이 그렇게 유용하게 돌아올 것이라는 것을 알았습니까? BFS와 그래프의 연결된 구성 요소를 찾는 응용 프로그램은 1945 년 콘라드 주즈에 의해 발명되었다, 그의 (거부) Plankalkül 프로그래밍 언어에 박사 학위 논문, 그러나 이것은 1972 년까지 출판되지 않았다. [2] 그것은 미로에서 가장 짧은 경로를 찾기 위해 그것을 사용 에드워드 F. 무어에 의해 1959 년에 재발명되었다,[3][4] 나중에 와이어 라우팅 알고리즘으로 C. Y. 리에 의해 개발 (출판 1961). [5] 좋아, 그건 상당히 분명 보인다. 다른 두 가지 유형의 트리 순회 알고리즘을 차별화하는 또 다른 것은 무엇입니까? 이 두 알고리즘의 절차의 차이점을 이미 다루었습니다. 아직 이야기하지 않은 다른 중요한 측면인 구현에 대해 생각해 봅시다.

이 단계에서는 표시되지 않은(방문되지 않은) 노드가 남아 있습니다. 그러나 알고리즘에 따라 우리는 방문하지 않은 모든 노드를 얻기 위해 계속 큐잉합니다. 큐가 비워지면 프로그램이 끝났습니다. 공간 복잡성은 이와 유사하며, 확인해야 하는 노드를 추가할 때 큐가 증가하고 축소되는 정도와 관련이 있습니다. 최악의 경우 트리에 있는 모든 노드가 모두 서로의 자식인 경우 트리의 모든 노드를 큐에 대기할 수 있으므로 트리에 노드가 있는 만큼 많은 메모리를 사용할 수 있습니다. 큐의 크기가 트리의 노드 수로 증가할 수 있는 경우 BFS 알고리즘의 공간 복잡성은 트리의 노드 수인 선형 시간 또는 O(n)입니다. 그래프의 정점 수가 미리 알려지고 추가 데이터 구조가 큐에 이미 추가된 정점을 결정하는 데 사용되는 경우 공간 복잡성을 O(| V | ) {디스플레이 스타일 O(| V |)} 여기서 | V | {디스플레이 스타일 | V |} 은 정점 집합의 카디널리티입니다. 이는 알고리즘 구현에서 사용되는 그래프 표현에 따라 달라질 수 있는 그래프 자체에 필요한 공간에 추가됩니다. 최소 경로 P는 노드 A에서 시작하여 E. 알고리즘에서 끝나는 광범위한 첫 번째 검색 알고리즘을 적용하여 찾을 수 있습니다. QUEUE1은 큐2가 QUEUE1에서 처리되고 삭제되는 모든 노드를 보유하는 동안 처리할 모든 노드를 보유합니다.

BFS(너비 우선 검색)는 트리 또는 그래프 데이터 구조를 트래버스 또는 검색하기 위한 알고리즘입니다. 트리 루트(또는 그래프의 일부 임의 노드(`검색 키`[1]라고도 함)에서 시작하여 다음 깊이 수준에서 노드로 이동하기 전에 현재 깊이의 모든 인접 노드를 탐색합니다. BFS 알고리즘의 시간 복잡성은 노드를 방문하는 데 걸리는 시간에 직접적으로 따라 달라집니다. 노드의 값을 읽고 자식을 큐에 대기하는 데 걸리는 시간은 노드에 따라 변경되지 않으므로 노드를 방문하는 데 일정한 시간 또는 O(1) 시간이 걸린다고 말할 수 있습니다.