[필수 알고리즘] BFS 너비 우선 탐색 (Queue 구조) 이해

2023. 1. 16. 23:16·Back-End/알고리즘

BFS 너비 우선 탐색 (Breadth-First Search)

BFS 너비 우선 탐색 방법

너비 우선 탐색(Breadth-first search, BFS)은 맹목적 탐색방법의 하나로 루트 노드(혹은 다른 임의의 노드)에서 시작해서 인접한 노드를 먼저 탐색한다.

그렇게 되면 시작 정점으로부터 가까운 정점을 먼저 방문하고 멀리 떨어져 있는 정점을 나중에 방문할 수 있다.

Queue를 활용해야만 순서대로 접근이 가능하다.

 

주로 두 노드 사이의 최단 경로를 찾고 싶을 때 이 방법을 선택한다.

 

ex)  지구 상에 존재하는 모든 친구 관계를 그래프로 표현한 후 철수와 영희사이에 존재하는 경로를 찾는 경우

  • 깊이 우선 탐색(DFS)의 경우 - 모든 친구 관계를 다 살펴봐야 할지도 모름
  • 너비 우선 탐색(BFS)의 경우 - 철수와 가까운 관계부터 탐색

 

Queue으로 이해하는 BFS

BFS 경로 => A, B, C, D

시간 복잡도와 장단점

시간복잡도

  • 시간복잡도는 DFS와 똑같다. 모든 정점을 한 번씩 방문하여 인접한 간선을 검사하기 때문
  • 인접 행렬에서의 시간 복잡도: O(V²)
  • 인접 리스트에서의 시간 복잡도: O(V+E)
  • V: 정점(노드)의 개수, E: 간선의 개수

장단점

  •  장점
    • 출발노드에서 목표노드까지의 최단 길이 경로를 보장한다.
  • 단점:
    • 경로가 매우 길 경우에는 탐색 가지가 급격히 증가함에 따라 보다 많은 기억 공간을 필요로 하게 된다.
    • 해가 존재하지 않는다면 유한 그래프(finite graph)의 경우에는 모든 그래프를 탐색한 후에 실패로 끝난다.
    • 무한 그래프(infinite graph)의 경우에는 결코 해를 찾지도 못하고, 끝내지도 못한다.

 

BFS를 활용하기 적합한 문제

  • 최단거리 구해야 하는 문제

너비 우선 탐색으로 현재 노드에서 가까운 곳부터 찾기 때문에 경로를 탐색 시 먼저 찾아지는 해답이 곧 최단거리기 때문이다.(장점)

 

  • 검색대상의 규모가 크지 않고, 검색 시작 지점으로부터 원하는 대상이 별로 멀지 않다면 BFS

 

 

 

'Back-End > 알고리즘' 카테고리의 다른 글

[필수 알고리즘] 그리디 알고리즘(Greedy Algorithm) 이해  (0) 2023.02.03
[필수 알고리즘] 이분 탐색(Binary Search) 이해  (0) 2023.01.25
[필수 알고리즘] 동적계획법 DP (Dynamic Programming) 이해  (0) 2023.01.25
[필수 알고리즘] DFS 깊이 우선 탐색 (Stack 구조) 이해  (1) 2023.01.12
[필수 알고리즘] 재귀호출 기본 -백트래킹(Backtracking)  (0) 2023.01.06
'Back-End/알고리즘' 카테고리의 다른 글
  • [필수 알고리즘] 이분 탐색(Binary Search) 이해
  • [필수 알고리즘] 동적계획법 DP (Dynamic Programming) 이해
  • [필수 알고리즘] DFS 깊이 우선 탐색 (Stack 구조) 이해
  • [필수 알고리즘] 재귀호출 기본 -백트래킹(Backtracking)
COBI-98
COBI-98
배운 것을 응용하기 위해 기록하는 것을 선호하며 백엔드를 공부하고 있습니다.
  • COBI-98
    은로그
    COBI-98
  • 전체
    오늘
    어제
    • 은로그 (79)
      • Back-End (32)
        • Java (5)
        • Spring (16)
        • DB (1)
        • 알고리즘 (7)
        • ETC (2)
      • 개발 일기 (0)
      • 회고 (4)
      • Project (10)
        • 협업프로젝트 (7)
        • 국비프로젝트 (2)
      • Web (2)
        • Server (2)
      • Git (2)
      • CS (0)
      • 코딩테스트 (24)
        • 백준 (17)
        • 프로그래머스 (7)
      • 우아한 테크코스 (5)
  • 블로그 메뉴

    • ✨깃허브
    • 홈
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    그리디 알고리즘
    코딩테스트
    Spring
    김영한님
    Java
    BFS
    백엔드
    백트래킹
    우아한테크코스
    배민
    N과 M
    코테
    2단계
    inflean
    프로그래머스
    인프런
    elk
    DFS
    백준
    재귀
    우아한형제들
    레벨2
    깊이 우선 탐색
    배달의민족
    김영한강의
    재귀함수
    우테코
    큐
    재귀알고리즘
    백준Java
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.4
COBI-98
[필수 알고리즘] BFS 너비 우선 탐색 (Queue 구조) 이해
상단으로

티스토리툴바