Big Ben
Big Ben's Log
Big Ben
전체 방문자
오늘
어제
  • 전체 글 (80)
    • 파이썬 (23)
      • 파이썬 기초 (5)
      • 클래스 (6)
      • 자료구조 (4)
      • Tensorflow (3)
      • PyTorch (2)
      • konlpy (1)
      • anaconda (1)
    • 머신러닝 (3)
      • 선형회귀 (1)
      • Tree 기반 (1)
    • 딥러닝 (6)
      • NLP (2)
      • VISION (2)
      • TABULAR (0)
      • 딥러닝 서버 구축 (2)
    • 그래프 이론 (1)
      • 그래프마이닝 (1)
      • GNN (0)
    • 강화학습 (3)
      • 강화학습 기본 (3)
    • 인공지능 (5)
    • 추천시스템 (2)
      • 추천시스템 기초 (2)
    • Competitions (1)
    • 빅데이터 (8)
      • 하둡 (3)
      • 스파크 (4)
      • 클라우드 (1)
    • SQL (7)
      • MariaDB (2)
    • 논문 리뷰 (2)
    • 대학원 (0)
      • 데이터 사이언스 (0)
      • 경제학 (0)
    • 선형대수학 (7)
      • 선형대수 ICE BREAKING (1)
      • 벡터 (5)
      • 고윳값 (1)
    • 개인프로젝트 (0)
      • 포트폴리오 대시보드 + AI기반 주식 자동매매 (0)
    • 재테크 (1)
    • 자동차 (0)
    • 알고리즘 (11)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 위치로그
  • 방명록

공지사항

인기 글

태그

  • class
  • 자료구조
  • PYTHON
  • 프로그래밍
  • pytorch
  • 딥러닝
  • 선형대수학
  • TensorFlow
  • 객체지향
  • 선형대수
  • 데이터사이언스
  • 백준
  • mysql
  • 알고리즘
  • 데이터
  • 하둡
  • 객체
  • 프로그래머스
  • sql
  • AI
  • 파이썬기초
  • 코딩테스트
  • 인공지능
  • 데이터베이스
  • 파이썬
  • 코테
  • Baekjoon
  • 빅데이터
  • 머신러닝
  • MariaDB

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
Big Ben

Big Ben's Log

[python] 기본적인 탐색 알고리즘 2 - BFS
인공지능

[python] 기본적인 탐색 알고리즘 2 - BFS

2022. 12. 31. 21:43
반응형

기본적인 탐색 알고리즘 관련 내용은 이전 포스팅 참고

 

[python] 기본적인 탐색 알고리즘 1 - DFS

탐색 알고리즘에 대해 알아봅시다. 인공지능을 공부하면, 상당수의 개념이 상태공간에서 비롯됨을 알 수 있습니다. 이러한 상태공간을 탐색하는데에는 여러 방법이 있는데요. 그중에서도 아무

benban.tistory.com

 

이번 포스팅에선 너비우선탐색 Breath-First Search (BFS)에 대해 알아보는 시간을 갖겠습니다.

 

BFS 원리 설명

depth가 얕은 것부터 우선적으로 탐색하는 모양의 그림을 볼 수 있다

위 그래프와 리스트는 BFS의 전형적인 문제해결 방법을 나타냅니다.

 

DFS와 다른점이 있다면, 어떠한 노드를 탐색했을 때, 해당 노드의 자식 노드를 가장 우선적으로 탐색하는 방법이 아닌 오픈리스트 맨 마지막에 추가하여 가장 나중에 탐색하여 넓게 넓게 확인하며 다음 깊이로 넘어가는 탐색 방법을 채택하고 있습니다.

간단하게 유사코드로 확인해보죠.

# BFS 설명을 위한 유사코드

초기 상태 (최상단에 위치한 노드)를 open list로 넣고, closed list는 빈 리스트로 시작

while open list:
	
    - open list의 첫 요소(a)를 꺼내고, a를 closed list로 이동 (a 탐사 완료)
    - a가 목표 상태라면 해를 발견하였으므로 탐색 종료
    - a에 인접한 상태 중 아직 탐사하지 않은 상태(자식 노드)를 모두 open list의 첫 요소를 제외한 나머지 부분(tail)에 추가

결정적으로 BFS는 open list에 새로운 요소를 추가하는 방법이 DFS와 다르다는 점을 염두에 두면 됩니다.

 

BFS 파이썬 코드 구현

지난 DFS와 같은 예제를 통해  BFS 파이썬 코드를 구현해보겠습니다.

 

위 미로를 그래프로 그렸을 때의 모습

 

# 그래프의 노드를 dictionary 형태로 표현 
# 자세한 내용은 DFS 포스팅 참고
graph = {
    '0' : ['3'],
    '3' : ['4', '7'],
    '4' : ['6', '1'],
    '7' : ['9', '8'],
    '6' : ['2', '100'],
    '2': [],
    '100' : [],
    '1': [],
    '9': [],
    '8': ['10', '5'],
    '10': [],
    '5': []
}


# BFS

def bfs(graph, start_node):

    open, closed = [], []
    open.append(start_node)

    while open:
        node = open[0]
        del open[0]

        if node not in closed:
            closed.append(node)
            open.extend(graph[node])
        if node == '100':
            break
    return closed
    
    
bfs(graph, '0')

# ----- 출력물 ------
['0', '3', '4', '7', '6', '1', '9', '8', '2', '100']

위처럼 너비우선 탐색 (BFS)를 파이썬으로 구현해보았습니다.

 

BFS의 특징은 

- 초기 상태에 가까운 곳에 해가 있으면 해를 빠르게 발견할 수 있는 장점이 있고,

- 탐색 트리 구조가 가로로 넓은 경우(즉, 분기가 많은 경우) 오픈 리스트에 유지해야 할 노드의 수가 많다는 점이 특징입니다.

 

미로 탐색 예제를 통해 깊이우선 탐색과 너비우선 탐색에 대해 알아보았습니다.

 

반응형
저작자표시

'인공지능' 카테고리의 다른 글

[python] 해밍 거리 (Hamming Distance) - 동적 계획법  (0) 2022.12.31
[python] 기본적인 탐색 알고리즘 1 - DFS  (0) 2022.12.31
[인공지능] 프레임 문제 (Frame Issue)  (0) 2022.12.23
[인공지능] Strong AI vs Weak AI  (0) 2022.12.23
    '인공지능' 카테고리의 다른 글
    • [python] 해밍 거리 (Hamming Distance) - 동적 계획법
    • [python] 기본적인 탐색 알고리즘 1 - DFS
    • [인공지능] 프레임 문제 (Frame Issue)
    • [인공지능] Strong AI vs Weak AI
    Big Ben
    Big Ben
    Data Scientist

    티스토리툴바