ํค์๋
- ๊ทธ๋ํ ํ์
- BFS(Breadth First Search; ๋๋น ์ฐ์ ํ์)
- DFS(Depth First Search; ๊น์ด ์ฐ์ ํ์)
- ์คํ, ํ, ์ฌ๊ท ํ์ฉ
๊ทธ๋ํ ์ํ
- ์ํ : ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๋ฉด์ ํ์ํ๋ ์๊ณ ๋ฆฌ์ฆ
- ๊ทธ๋ํ ํ์ ์๊ณ ๋ฆฌ์ฆ์ผ๋ก๋ BFS(๋๋น ์ฐ์ ํ์)์ DFS(๊น์ด ์ฐ์ ํ์)์ด ์๋ค.
[์๊ณ ๋ฆฌ์ฆ : ํ์] BFS(๋๋น ์ฐ์ ํ์)
- ํ์ฌ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๊ฐ๊น์ด ๋ ธ๋๋ค๋ถํฐ ํ์
- ์๋ฃ๊ตฌ์กฐ ์ค
ํ(queue)
๋ฅผ ํตํด ๊ตฌํ - ์ฅ์ : ๋๋น๋ฅผ ์ฐ์ ์ผ๋ก ํ์ํ๊ธฐ ๋๋ฌธ์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๊ธฐ์ ์ ๋ฆฌํ๋ค.
- ๋จ์ : ์ฌ๊ท๋ก๋ ๊ตฌํ ๊ฐ๋ฅํ DFS์ ๋ฌ๋ฆฌ ํ๋ฅผ ์ด์ฉํด ํ์ํ ๋ ธ๋๋ค์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ง์ด ์ฐจ์งํ๋ค.
ํ
๋ฅผ ์ด์ฉํ BFS ๊ตฌํ
## ๊ทธ๋ํ(bfs_graph)๊ฐ ๋ฐ๋ก ์ฃผ์ด์ ธ์ผํจ
def bfs_queue(start_node, bfs_graph):
bfs_list = [start_node]
que = [start_node]
while que:
node = que.pop(0)
for i in bfs_graph[node]:
if i not in bfs_list:
bfs_list.append(i)
que.append(i)
return bfs_list
[์๊ณ ๋ฆฌ์ฆ : ํ์] DFS(๊น์ด ์ฐ์ ํ์)
- ํ์ฌ ๋ ธ๋์์ ๊ฐ ์ ์๋ ์ ๋ค๊น์ง ๊น๊ฒ ๋ค์ด๊ฐ๋ฉด์ ํ์
- ์๋ฃ๊ตฌ์กฐ ์ค
์คํ(stack)
์ ํตํด ๊ตฌํ ๋๋ ์ฌ๊ทํจ์๋ฅผ ์ด์ฉํ์ฌ ๊ตฌํ - ์ฅ์ : BFS์ ๋นํด ๋ฉ๋ชจ๋ฆฌ(์ ์ฅ๊ณต๊ฐ)์ ํ์์ฑ์ด ์ ๋ค. ์ฐพ์์ผํ๋ ๋ ธ๋๊ฐ ๊น์ ๋จ๊ณ์ ์์์๋ก ์ ๋ฆฌํ๋ค.
- ๋จ์ : ์ฐพ์ ๋ต์ด ์ต๋จ ๊ฒฝ๋ก๋ผ๋ ๋ณด์ฅ์ด ์๋ค.
์คํ
์ ์ด์ฉํ DFS ๊ตฌํ
## ๊ทธ๋ํ(dfs_graph)๊ฐ ๋ฐ๋ก ์ฃผ์ด์ ธ์ผํจ
def dfs_stack(start_node):
dfs_list = []
stack = [start_node]
while stack:
node = stack.pop()
if node not in dfs_list:
dfs_list.append(node)
stack.extend(dfs_graph[node])
return dfs_list
์ฌ๊ท
๋ฅผ ์ด์ฉํ DFS ๊ตฌํ
## ๊ทธ๋ํ(dfs_graph)๊ฐ ๋ฐ๋ก ์ฃผ์ด์ ธ์ผํจ
def dfs_recur(node, dfs_list=[]):
dfs_list.append(node)
for i in dfs_graph[node]:
if i not in dfs_list:
dfs_recur(i)
return dfs_list
'๐ฟ Data > ๋ถํธ์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[TIL] 107. ๊ทธ๋ฆฌ๋(Greedy; ํ์ ์๊ณ ๋ฆฌ์ฆ) (0) | 2022.04.14 |
---|---|
[TIL] 106. ๋์ ํ๋ก๊ทธ๋๋ฐ(DP) (0) | 2022.04.14 |
[TIL] 104. [์๋ฃ๊ตฌ์กฐ] ์ํ (0) | 2022.04.12 |
[TIL] 103. [์๋ฃ๊ตฌ์กฐ] ๊ทธ๋ํ (0) | 2022.04.12 |
[TIL] 102. [์๋ฃ๊ตฌ์กฐ] ํด์ํ ์ด๋ธ (0) | 2022.04.11 |