ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • BFS, DFS
    Data Engineering/알고리즘 - Python 2021. 6. 29. 11:26

     

    완전 탐색 기법 중에는 BFS/DFS 알고리즘이 있다.

     

    코딩 테스트 문제에서 자주 만나게 되는 알고리즘 카테고리이다.

    그렇기 때문에 문제를 풀기 전에 개념을 세우는 것이 가장 중요하다.

     

    개념을 공부하기 전에 그래프/트리, 스택/큐 자료구조에 대해 알고 가자.

     

     

     

    📍그래프란?

    : 정점(Node)와 정점을 연결하는 간선(Edge)로 이루어진 자료구조

    : 순환 싸이클이 있을 수도 있고, 없을 수도 있다.

     

    ◾정점: A, B, C, D, E

    ◾간선: 정점을 이어주는 선(왼쪽의 경우 6개의 간선으로 이루어짐)

     

     

     

     

     

    📍트리란?

    : 순환 싸이클이 없는 그래프를 의미한다.

     

     

     

     

     

     


     

     

     

     

    📍스택이란?

    : 데이터를 기록하는 구조이다.

    LIFO(Last Input First Out)

    → push: 가장 먼저 입력된 데이터가 가장 밑에 쌓인다. (차곡차곡 쌓음)

    → pop: 가장 마지막에 들어온 데이터가 가장 먼저 삭제된다.

     

     

     

     

    📍큐란 무엇인가?

    : 스택과 같은 데이터 기록 구조이지만 입출력 형식이 다르다.

    FIFO(First Input First Out)

    → 가장 먼저 입력된 데이터가 먼저 삭제된다.

    → 한쪽 끝에서만 삽입(Enque)이 이루어지고, 다른 한쪽 끝에서만 삭제(Deque)가 이루어짐

     

     

     

     


     

     

     

     

    출처 https://covenant.tistory.com/132

     

    📍DFS(깊이 우선 탐색)

    : 루트 노드에서 시작해서 다음 분기로 넘어가기 전에 해당 분기를 완벽하게 탐색한다.

    스택 또는 재귀함수로 구현

    → 이동할 때에 가중치 또는 제약이 있는 경우 사용

     

     

    📍BFS(너비 우선 탐색)

    : 루트 노드에서 인접한 노드를 먼저 탐색한다.

    큐로 구현

    → 최단 거리 문제를 풀 때 사용

     

     

     

     

     

     

     

     

     

     

    참고

     

    스택 이미지: https://ko.wikipedia.org/wiki/%EC%8A%A4%ED%83%9D

    큐 이미지: https://namu.wiki/w/%ED%81%90(%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0) 

     

    댓글

Designed by Tistory.