본문 바로가기
개발/기본) 알고리즘

알고리즘)알고리즘 너비 우선 탐색 (BFS : Breadth-First Search)

by 테샤르 2019. 10. 28.

알고리즘 너비 우선 탐색 (BFS : Breadth-First Search)

 

DFS와는 구현 방식이 조금 더 다른 형태의 탐색 알고리즘이다.

너비 우선 탐색은 탐색하는 곳의 동등한 뎁스를 우선 탐색 이후에 다시 하위에 대한 노드를 탐색하는 알고리즘이다.

DFS와 다른점은 재귀적으로 동작하지 않고 반복 탐색을 한다.

 

너비 우선 탐색(BFS)의 특징

직관적이지 않은 면이 있다.

BFS는 시작 노드에서 시작해서 거리에 따라 단계별로 탐색한다고 볼 수 있다.

BFS는 재귀적으로 동작하지 않는다.

이 알고리즘을 구현할 때 가장 큰 차이점은, 그래프 탐색의 경우 어떤 노드를 방문했었는지 여부를 반드시 검사해야 한다는 것이다.

이를 검사하지 않을 경우 무한루프에 빠질 위험이 있다.

BFS는 방문한 노드들을 차례로 저장한 후 꺼낼 수 있는 자료 구조인 큐(Queue)를 사용한다.

즉, 선입선출(FIFO) 원칙으로 탐색 (Queue)로 구현 이용해서 반복적 형태로 구현하는 것이 가장 좋다.

‘Prim’, ‘Dijkstra’ 알고리즘과 유사하다.

 

너비 우선 탐색(BFS)의 시간 복잡도

인접 리스트로 표현된 그래프: O(N+E)

인접 행렬로 표현된 그래프: O(N^2)

깊이 우선 탐색(DFS)과 마찬가지로 그래프 내에 적은 숫자의 간선만을 가지는 희소 그래프(Sparse Graph) 의 경우 인접 행렬보다 인접 리스트를 사용하는 것이 유리하다.

 

 

반응형

댓글