# 금융

[BFS] BFS 기본 구성

커피중독자 2022. 8. 1. 08:14

[문제]

- BFS 알고리즘의 기본을 구성해본다

 

[아이디어]

- DFS 는 재귀함수 형태로 만들어진다. 스택 자료구조로 만들어진다.

- BFS 는 큐 자료구조로 만들어진다.

- DFS 와 BFS모두 시간복잡도는 O(N) 으로 동일하지만, 일반적으로 실제 수행시간은 BFS가 빠르다고 본다. (재귀함수의 이용으로 인한 컴퓨터의 동작시간으로만 언급되고 있으며, 너무 깊어지는 내용이므로 일반적인 수행시간으로만 알고있도록 하자)

 

# deque 라이브러리를 이용
from collections import deque

def bfs(graph, start, visited):
  # 큐의 구현을 위해 deque 라이브러리를 이용한다.
  queue = deque([start])

  # 현재노드 방문처리
  visited[start] = True

  # 큐가 빌때까지 반복한다
  while queue:
    # 큐의 원소를 pop
    v = queue.popleft()
    print(v, end=' ')

    for i in graph[v]:
      if not visited[i]:
        queue.append(i)
        visited[i] = True

graph = [
  [],       # 0번은 존재하지 않는다
  [2,3,8],  # 1번 주변정보
  [1,7],    # 2번 주변정보
  [1,4,5],  # 3반 주변정보
  [3,5],
  [3,4],
  [7],
  [2,6,8],
  [1,7]    # 8번 주변정보
]

visited = [False] * 9

bfs(graph, 1, visited)

 

[해설]

- 큐를 이용하여 방문했던 graph 를 체크하는식으로 알고리즘을 만들었다.

- graph 대신 배열이 주어지면 더 쉬운방식으로 문제의 해결이 가능하다고한다.