최적화 문제 를 해결하는 알고리즘 이다.def fibo2(n):
f = [0] * (n+1)
f[0] = 0
f[1] = 0
for i in range(2, n+1):
f[i] = f[i-1] + f[i+2]
return f[n]
1) 시작 정점 v를 결정하여 방문
2) 정점 v에 인접한 정점 중에서
3) 스택이 공백이 될 때까지 반복한다
def DFS(graph, start_node):
## 초기화
need_visited, visited = list(), list()
## 시작 노드
need_visited.append(start_node)
## 만약 아직도 방문이 필요한 노드가 있다면,
while need_visited:
## 그 중에서 가장 마지막 데이터를 추출 (스택 구조의 활용)
node = need_visited.pop()
## 만약 그 노드가 방문한 목록에 없다면
if node not in visited:
## 방문한 목록에 추가하기
visited.append(node)
## 그 노드에 연결된 노드를
need_visited.extend(graph[node])
return visited
def DFS_recursive(graph, start, visited = []):
## 데이터를 추가하는 명령어 / 재귀가 이루어짐
visited.append(start)
for node in graph[start]:
if node not in visited:
DFS_recursive(graph, node, visited)
return visited
def DFS2(graph, start_node):
## deque 패키지 불러오기
from collections import deque
visited = []
need_visited = deque()
## 시작노드
need_visited.append(start_node)
## 방문필요가 있다면
while need_visited:
## 시작 노드 지정
node = need_visited.pop()
##만약 방문한 리스트에 없다면
if node not in visited:
## 방문 리스트에 노드를 추가
visited.append(node)
## 인접 노드들을 방문 예정 리스트에 추가
need_visited.extend(graph[node])
return visited