728x90
DFS(Depth-First Search)
- 깊이 우선 탐색 알고리즘
- 특정한 경로를 탐색하다가 특정한 상황에서 최대한 깊숙이 들어가서 노드를 방문 한 후 다시 돌아가 다른 경로로 탐색하는 알고리즘
- DFS는 스택 자료구조를 이용한다(보통 재귀함수를 이용해 DFS를 구현한다.)
- 동작과정
- 탐색 시작노드를 스택에 삽입 후 방문 처리를 한다.
- 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접노드를 스택에 넣고 방문처리를 한다. 방문하지 않은 인접노드가 없으면 최상단 노드를 꺼낸다.
- 2를 수행할 수 없을때까지 반복한다.
def DFS(graph,v,visit):
visited[v] = True
print(v)
for i in graph[v]:
if not visited[i]:
DFS(graph,i,visited)
BFS(Breadth-First Search)
- 너비 우선 탐색 알고리즘
- 가까운 노드부터 탐색하는 알고리즘
- 큐를 이용해서 구현하는 것이 정석이다.
- 동작과정
- 탐색 시작노드를 큐에 삽입 후 방문처리를 한다.
- 큐에서 노드를 꺼내 해당 노드의 인접노드중 방문하지않은 노드를 모두 큐에 삽입하고 방문 처리를 한다.
- 2의 과정을 수행할 수 없을때까지 반복한다.
from collections import deque
def BFS(graph,start,visited):
queue = deque([start])
visited[start] = True
while queue:
v = queue.popleft()
print(v)
for i in graph[v]
if not visited[i]:
queue.append(i)
visited[i] = True
728x90
'Computer > 알고리즘' 카테고리의 다른 글
다익스트라_Dijkstra (0) | 2024.01.21 |
---|---|
위상정렬_TopologicalSort (0) | 2024.01.19 |
병합정렬_MergeSort (0) | 2024.01.17 |
분할정복_DivideAndConquer (0) | 2024.01.17 |
이진탐색_BinarySearch (0) | 2024.01.16 |