탐색(Search)이란 많은 양의 데이터 중에서 원하는 데이터를 찾는 과정
대표적인 그래프 탐색 알고리즘으로DFS
와BFS
가 있다
선입후출
)의 자료구조## Stack
stack = []
stack.append(5)
stack.append(3)
stack.append(2)
stack.append(4)
stack.pop()
stack.append(7)
print(stack[::-1])
선입선출
)의 자료구조이다## Queue
from collections import deque
queue = deque()
queue.append(5)
queue.append(2)
queue.append(3)
queue.append(7)
queue.popleft()
queue.append(1)
queue.append(4)
queue.popleft()
print(queue)
자기 자신을 다시 호출하는 함수
예제) 유클리드 호제법
## 유클리드 호제법을 재귀함수로 구현하여 최대공약수(GCD) 구하기
def gcd(a, b):
if a % b == 0:
return b
else:
return gcd(b, a % b)
print(gcd(192, 162))
# 재귀함수로 구현하는 팩토리얼
def factorial_recursive(n):
if n <= 1:
return 1
return n * factorial_recursive(n - 1)
print(factorial_recursive(5))
깊이 우선 탐색
이라고도 부르며 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘스택 자료구조(혹은 재귀 함수)
를 이용하며, 구체적인 동작은 다음과 같다### DFS
graph = [
[],
[2, 3, 8], ## 1번 노드와 연결된 노드
[1, 7], ## 2번 노드와 연결된 노드
[1, 4, 5],
[3, 5],
[3, 4],
[7],
[2, 6, 8],
[1, 7]
]
# 각 노드가 방문된 정보를 표현
visited = [False] * 9
# DFS
def dfs(graph, v, visitied):
visited[v] = True
print(v, end=' ')
for i in graph[v]:
if not visitied[i]:
dfs(graph, i, visitied)
dfs(graph, 1, visited)
너비 우선 탐색
이라고도 부르며, 그래프에서 가까운 노드부터 우선적으로 탐색하는 알고리즘큐 자료구조
를 이용하며, 구체적인 동작 과정은 다음과 같다## BFS
from collections import deque
graph = [
[],
[2, 3, 8], ## 1번 노드와 연결된 노드
[1, 7], ## 2번 노드와 연결된 노드
[1, 4, 5],
[3, 5],
[3, 4],
[7],
[2, 6, 8],
[1, 7]
]
# 각 노드가 방문된 정보를 표현
visited = [False] * 9
# BFS
def bfs(graph, start, visited):
queue = deque([start])
visited[start] = True
while queue:
v = queue.popleft()
print(v, end=' ')
for i in graph[v]:
if not visited[i]:
queue.append(i)
visited[i] = True
bfs(graph, 1, visited)