[필수 알고리즘] 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)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바