본문 바로가기
Algorithms

그림으로 개념을 이해하는 알고리즘 - Ch 06

by soojitasan 2024. 6. 23. 15:45

 

CH 06. 너비 우선 탐색

 

- 너비 우선 탐색 : 두 항목 간 최단 경로

- 그래프 : 정점과 간선으로 이루어짐

   > 바로 이어진 정점은 이웃

   > 그래프 종류 : 방향, 무방향

   > 키/값 쌍을 넣을 때 순서는 중요하지 않음 (해시테이블은 순서를 가지지 않으므로)

   > 최소 실행시간 : O(사람의 수 + 간선의 수)

 

graph = {}
graph["you"] = ["alice", "bob", "claire"]
graph["bob"] = ["anuj", "peggy"]
graph["alice"] = ["peggy"]
graph["claire"] = ["thom", "jonny"]
graph["anuj"] = []
graph["peggy"] = []
graph["thom"] = []
graph["jonny"] = []

print(graph)

 

 

- 큐 (선입선출) <-> 스택 (후입선출)

  1) 삽입 (push) : 맨 마지막에 추가

  2) 제거 (pop) : 맨 처음 항목 제거

 

from collections import deque

def person_is_seller(name):
  return name[-1] == 'm'

def search(name):
  search_queue = deque()
  search_queue += graph[name]
  searched = []

  while search_queue:
    person = search_queue.popleft()
    if not person in searched:
      if person_is_seller(person):
        print(person + " is a mango seller!")
        return True
      else:
        search_queue += graph[person]
        searched.append(person)  ## 확인했다고 체크 필요 ... 무한 반복 여지
  return False

search("you")

 


참고자료

Hello Coding 그림으로 개념을 이해하는 알고리즘