| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 |
| 9 | 10 | 11 | 12 | 13 | 14 | 15 |
| 16 | 17 | 18 | 19 | 20 | 21 | 22 |
| 23 | 24 | 25 | 26 | 27 | 28 | 29 |
| 30 |
- 앱
- 알고리즘
- 논리회로 #컴퓨터
- 조건부정리
- 행렬
- 선형대수학
- Android
- 파스칼삼각형
- 잔차
- ios
- 자바
- 개발자
- 군내
- 최대우도법
- Flutter
- f비
- 개발
- 일반화오차
- 평균로그우도
- Java
- 운영체제
- Eigenvalue
- 상대 엔트로피
- 앱개발
- Eigenvector
- pintos
- AIC
- 비둘기집원리
- qq플롯
- 군간
- Today
- Total
Dev_bob
[알고리즘 개념] DFS 본문
<DFS>
오늘 배워볼 주제는 DFS입니다.
DFS란 무엇인가요?
DFS(깊이 우선 탐색, Depth-First Search)
-> 그래프에서 노드를 탐색하는 알고리즘 중 하나
-> 가능한 깊게 노드를 탐색,가능한 깊게 노드를 방문하고 더 이상 방문할 노드가 없다면 이전으로 돌아가 다른 경로를 탐색한다.
->주로 스택과 재귀함수를 사용한다.
DFS의 메커니즘은 다음과 같습니다.
1. 시작 노드를 스택에 삽입하고, 방문처리
2. 스택의 최상단 노드의 인접노드가 방문처리가 되어 있지 않다면, 해당 노드를 스택에 넣고 방문처리를 한다.
3. 방문하지 않은 인접 노드가 없다면 스택에서 해당 노드를 꺼낸다.
4. 2와 3을 반복하여 모든 노드를 방문할때까지 계속한다.


그래프의 구현 방식
1. 인접행렬
2. 인접리스트
-인접행렬 - 2차원 배열로 표현
노드의 수가 N이라면 N*N행렬을 만들어서 표현하는 겁니다.
def dfs(matrix, v, visited):
visited[v] = True #시작노드 방문처리
print(v, end=' ') #시작노드 출력
for i in range(len(matrix[v])): #시작 노드의 인접 노드 확인
if matrix[v][i] == 1 and not visited[i]: #인접 노드(1)이 방문처리가 되어 있지 않다면
dfs(matrix, i, visited) #dfs 재귀처리
n = 5 # 노드의 수
visited = [False] * n
graph = [
[0, 1, 1, 0, 0],
[1, 0, 0, 1, 0],
[1, 0, 0, 0, 1],
[0, 1, 0, 0, 0],
[0, 0, 1, 0, 0]
]
dfs(graph, 0, visited)
인접리스트 - 각 노드에 연결된 다른 노드들의 목록을 배열이나 리스트로 저장합니다.
def dfs(graph, v, visited):
visited[v] = True #노드 방문처리
print(v, end=' ') #출력
for i in graph[v]: #연결된 노드 중 방문처리 안되어 있는게 있다면 방문처리
if not visited[i]:
dfs(graph, i, visited)
n = 5 # 노드의 수
visited = [False] * n
graph = [
[1, 2], # 노드 0에 연결된 노드
[0, 3], # 노드 1에 연결된 노드
[0, 4], # 노드 2에 연결된 노드
[1], # 노드 3에 연결된 노드
[2] # 노드 4에 연결된 노드
]
dfs(graph, 0, visited)
인접행렬 방식은 연결되어 있지 않은 노드까지 모두 구현하는 반면에, 인접리스트 방식은 직접 연결된 노드만 저장하기에 메모리를 효율적으로 사용합니다.
시간복잡도
N:정점의 수, E:간선의 수
* 인접 행렬로 표현된 그래프 : O(N^2)
* 인접 리스트로 표현된 그래프 : O(N+E)
참고한 자료의 출처
[DFS, BFS/ 알고리즘] Depth First Search & Breadth First Search 알아보기
0. 그래프란? 1) 개념 : 정점(Vertex)과 정점들을 연결하는 간선(변, Edge)으로 이루어진 자료구조의 일종으로 G = (V,E) 로 나타낸다. - 방향이 있는 그래프(Directed Graphs) - 방향이 없는 그래프(Undirected Gra
lineho.tistory.com
'알고리즘 > 알고리즘 개념' 카테고리의 다른 글
| [알고리즘 개념]이진 탐색 알고리즘(Binary Search) (5) | 2024.05.21 |
|---|---|
| [알고리즘 개념] BFS (6) | 2024.05.18 |