1
1
# DFS, BFS
2
2
3
- 대표적인 탐색 알고리즘인 DFS, BFS에 대해 알아보자
4
-
3
+ 대표적인 탐색 알고리즘들인 DFS, BFS에 대해 알아보자
5
4
5
+ <br >
6
6
7
7
## DFS
8
8
@@ -12,44 +12,31 @@ DFS(Depth-First Search)는 깊이 우선 탐색 알고리즘으로, 그래프에
12
12
13
13
<img src =" https://blog.kakaocdn.net/dn/xC9Vq/btqB8n5A25K/GyOf4iwqu8euOyhwtFuyj1/img.gif " alt =" img " style =" zoom :50% ;" />
14
14
15
-
15
+ < br >
16
16
17
17
### 동작 과정
18
18
19
- 1 . 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다.
20
- 2 . 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리를 한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다.
21
- 3 . 2번의 과정을 더 이상 수행할 수 없을 때까지 반복한다.
22
-
19
+ 1 . ** 스택을 사용한 방식**
23
20
21
+ 1 . 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다.
24
22
25
- ### 시간 복잡도
23
+ 2 . 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리를 한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다.
26
24
27
- : ** Θ(V + E) **
25
+ 3 . 2번의 과정을 더 이상 수행할 수 없을 때까지 반복한다.
28
26
27
+ 2 . ** 재귀를 이용한 방식**
28
+ 1 . 현재 노드를 방문 처리
29
+ 2 . 현재 노드와 연결된 다른 노드를 재귀적으로 방문
29
30
31
+ <br >
30
32
31
- ### 코드
33
+ ### 시간 복잡도
32
34
33
- ``` js
34
- // 스택
35
- const bfs = (graph , startNode ) => {
36
- const visited = []; // 탐색을 마친 노드들
37
- const queue = []; // 탐색해야할 노드들
35
+ : ** Θ(V + E)**
38
36
39
- queue . push (startNode);
37
+ < br >
40
38
41
- while (queue .length !== 0 ) {
42
- const node = queue .shift ();
43
-
44
- if (! visited .includes (node)) {
45
- visited .push (node);
46
- queue = [... queue, ... graph[node]];
47
- }
48
- }
49
-
50
- return visited;
51
- };
52
- ```
39
+ ### 코드
53
40
54
41
``` js
55
42
// 재귀 함수
@@ -65,7 +52,7 @@ const dfs = (graph, node, visited) => {
65
52
}
66
53
```
67
54
68
-
55
+ < br >
69
56
70
57
## BFS
71
58
@@ -75,21 +62,21 @@ BFS(Breadth-First Search)는 너비 우선 탐색 알고리즘으로, 그래프
75
62
76
63
<img src =" https://blog.kakaocdn.net/dn/c305k7/btqB5E2hI4r/ea7vFo08tkDYo4c8wkfVok/img.gif " alt =" img " style =" zoom :50% ;" />
77
64
78
-
65
+ < br >
79
66
80
67
### 동작 과정
81
68
82
69
1 . 탐색 시작 노드를 큐에 삽입하고 방문 처리를 한다.
83
70
2 . 큐에서 노드를 꺼내 해당 노드의 인접 노드 중에서 방문하지 않은 노드를 모두 큐에 삽입하고 방문 처리를 한다.
84
71
3 . 2번의 과정을 더 이상 수행할 수 없을 때까지 반복한다.
85
72
86
-
73
+ < br >
87
74
88
75
### 시간 복잡도
89
76
90
77
: ** Θ(V + E)**
91
78
92
-
79
+ < br >
93
80
94
81
### 코드
95
82
@@ -112,3 +99,4 @@ const bfs = (graph, startNode) => {
112
99
return visited;
113
100
};
114
101
```
102
+
0 commit comments