Pepperminttt
Pepperminttt's Dev
Pepperminttt
전체 방문자
오늘
어제
  • devInfo (86)
    • forBeingGoodDeveloper (2)
    • React (2)
      • LostArk Open API (1)
    • algorithm (58)
      • problems (44)
      • theory (14)
    • computerScience (8)
      • network (8)
    • javaScript (8)
    • Java (4)
    • web (2)
      • webApplication (2)
    • etc. (1)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

  • solved.ac
  • bfs문제
  • 알고리즘
  • BFS
  • 백준
  • dfs
  • JavaScript
  • 탐욕법
  • 프로그래머스
  • Network
  • DP문제
  • DP
  • Java
  • greedy
  • 탐욕법 문제
  • C++
  • node.js
  • dfs문제
  • 벨만-포드
  • 그래프

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Pepperminttt

Pepperminttt's Dev

BFS/DFS(Breadth/Depth First Search)
algorithm/theory

BFS/DFS(Breadth/Depth First Search)

2022. 11. 5. 17:14

BFS와 DFS는 그래프를 그려 그래프 안을 돌아다니며 알맞는 경우를 찾을 때 사용되는 알고리즘이다.

이 알고리즘들은 하나의 저장장소와 visited 저장 장소를 이용하여 그래프의 규칙을 찾게 된다.


BFS

BFS는 Breadth Frist Search의 약자로 말 그대로 너비 우선 탐색을 하는 알고리즘이다.

BFS는 Queue를 사용하여 경우의 수를 저장한다. 해당 queue에서 shift를 이용하여 얕은 깊이의 요소들을 우선적으로 계산을 진행한다. 이를 통하여 시작 지점에서 너비 우선적으로 반환하는 프로그램을 작성할 수 있다. 

 

아래 그림을 보자

A지점에서 BFS 방식으로 Graph Traversals을 해보자

 

BFS는 queue에 저장을 하며 경우가 완료 되면 pop을 해주고, 방문하거나 접촉한 배열은 visited에 저장해준다. 여기서 Queue를 사용하므로 FIFO(first in first out)으로 진행이 된다.

 

진행은 아래 표와 같다.

Queue return visitied
A   A
BCD A ABCD
CDE AB ABCDE
DEF ABC ABCDEF
EF ABCD ABCDEF
FG ABCDE ABCDEFG
G ABCDEF ABCDEFG
  ABCDEFG  

 

진행을 하고 출력된 결과를 보면 아래와 같이 가까운 곳부터 먼저 출력 되는 것을 확인 할 수 있다. 이 때문에 이 알고리즘을 BFS라 부른다.

 

 


DFS

DFS는 Depth Frist Search의 약자로 말 그대로 깊이 먼저 탐색하는 알고리즘을 의미한다. 이는 여러 어플리케이션에서도 사용되는 알고리즘이다.

 

그래프에서 DFS구현하는 방법은 두가지가 있다.

  • recursion : call stack을 이용한다.
  • interation : stack을 이용한다.

두 구현 모두 스택을 사용하므로 FILO(first in last out)을 이용한다.

 

DFS도 위 Graph Traversal을 진행하면 아래와 같다.

Queue  return  visitied
A   A
BCD A ABCD
ECD AB ABCDE
GCD ABE ABCDEG
CD ABEG ABCDEG
FD ABEGC ABCDEGF
D ABEGCF ABCDEGF
  ABEGCFD ABCDEGF

 

이를 그림으로 나타내면 아래와 같다.

 

이전의 BFS와는 다르게 깊이가 깊은 곳부터 먼저 출력이 되는 것을 확인 할 수 있다.

이를 통해서 DFS는 깊이가 깊은 곳부터 출력한다는 것을 알 수 있다.

 

 

> BFS 관련 문제

> DFS 관련 문제

'algorithm > theory' 카테고리의 다른 글

소수(Prime number) 판별법/ javaScript  (0) 2023.06.01
순열/조합 (Permutation / Combination)  (0) 2022.11.05
탐욕법(Greedy)  (0) 2022.11.05
해쉬(Hash)  (0) 2022.11.05
동적계획법(Dynamic Programming)  (0) 2022.11.05
    'algorithm/theory' 카테고리의 다른 글
    • 순열/조합 (Permutation / Combination)
    • 탐욕법(Greedy)
    • 해쉬(Hash)
    • 동적계획법(Dynamic Programming)
    Pepperminttt
    Pepperminttt
    HTML, JavaScript, Python 등 Computer language TIL

    티스토리툴바