์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ์ธ๋์ํ๋ง
- ๋ฐ์ดํฐ๋ถ์
- Lambda
- ๋ ๋ฆฝํ๋ณธ
- ๋ฐ์ดํฐ๋ถ์์ค์ ๋ฌธ๊ฐ
- opencv
- ADP
- DBSCAN
- iloc
- Python
- pandas
- LDA
- ํฌ๋กค๋ง
- datascience
- dataframe
- ํ์ด์ฌ
- ์ฃผ์ฑ๋ถ๋ถ์
- ์๋ํด๋ผ์ฐ๋
- ADsP
- ๋น ๋ฐ์ดํฐ
- ๋น ๋ฐ์ดํฐ๋ถ์๊ธฐ์ฌ
- ๋ฐ์ดํฐ๋ถ๊ท ํ
- ๋์ํ๋ณธ
- PCA
- ์ค๋ฒ์ํ๋ง
- numpy
- ๋ฐ์ดํฐ๋ถ์์ ๋ฌธ๊ฐ
- ํ ์คํธ๋ถ์
- ๊ตฐ์งํ
- t-test
Data Science LAB
DFS (๊น์ด ์ฐ์ ํ์) & BFS (๋๋น ์ฐ์ ํ์) ๋ณธ๋ฌธ
DFS (๊น์ด ์ฐ์ ํ์) & BFS (๋๋น ์ฐ์ ํ์)
ใ ใ ใ ใ 2023. 1. 5. 16:121. ๊ทธ๋ํ
์ ์ (node)๊ณผ ๊ทธ ์ ์ ์ ์ฐ๊ฒฐํ๋ ๊ฐ์ (edge)์ผ๋ก ์ด๋ฃจ์ด์ง ์๋ฃ๊ตฌ์กฐ์ ์ผ์ข ์ ๋งํ๋ฉฐ,
๊ทธ๋ํ๋ฅผ ํ์ํ๋ ๊ฒ์ ํ๋์ ์ ์ ์ผ๋ก๋ถํฐ ์์ํ์ฌ ์ฐจ๋ก๋๋ก ๋ชจ๋ ์ ์ ๋ค์ ํ ๋ฒ์ฉ ๋ฐฉ๋ฌธํ๋ ๊ฒ์ ์๋ฏธํจ
-> DFS, BFS ๋ชจ๋ ๊ทธ๋ํ๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ
2. DFS (Depth - First Search)
: ๋ค์ ๋ถ๊ธฐ๋ก ๋์ด๊ฐ๊ธฐ ์ ์ ํด๋น ๋ถ๊ธฐ๋ฅผ ์๋ฒฝํ๊ฒ ํ์ํ๋ ๋ฐฉ์์ ์๋ฏธํจ

1. ๋ชจ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ์ ์ด ๋ฐฉ๋ฒ์ ์ ํํจ
2. ๊น์ด ์ฐ์ ํ์(DFS)์ด ๋๋น ์ฐ์ ํ์(BFS)๋ณด๋ค ์ข ๋ ๊ฐ๋จํจ
3. ๊ฒ์ ์๋ ์์ฒด๋ ๋๋น ์ฐ์ ํ์(BFS)์ ๋นํด์ ๋๋ฆผ
์คํ (stack) ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํต์ฌ
-> ํ์ฌ ๋ฐฉ๋ฌธํ ๋ ธ๋์ ์ฐ๊ฒฐ๋ ๋ ธ๋๋ฅผ ๋ฐฉ๋ฌธํด์ผ ํ ๋ฐฉํฅ์ผ๋ก ๊ฐ ์ ์์
- ํ์ด์ฌ ๊ตฌํ ์์
graph_list = {1: set([3, 4]),
2: set([3, 4, 5]),
3: set([1, 5]),
4: set([1]),
5: set([2, 6]),
6: set([3, 5])}
root_node = 1
def DFS_with_adj_list(graph, root):
visited = []
stack = [root]
while stack:
n = stack.pop()
if n not in visited:
visited.append(n)
stack += graph[n] - set(visited)
return visited
print(BFS_with_adj_list(graph_list, root_node))
2. BFS (Breadth - First Search)
: ๋ฃจํธ ๋ ธ๋ (ํน์ ๋ค๋ฅธ ์์์ ๋ ธ๋)์์ ์์ํด ์ธ์ ํ ๋ ธ๋๋ฅผ ๋จผ์ ํ์ํ๋ ๋ฐฉ๋ฒ์ผ๋ก, ์์ ์ ์ ์ผ๋ก๋ถํฐ ๊ฐ๊น์ด ์ ์ ์ ๋จผ์ ๋ฐฉ๋ฌธํ๊ณ ๋ฉ๋ฆฌ ๋จ์ด์ง ์ ์ ์ ๋์ค์ ๋ฐฉ๋ฌธํ๋ ์ํ ๋ฐฉ๋ฒ
-> ์ฃผ๋ก ๋ ๋ ธ๋ ์ฌ์ด์ ์ต๋จ ๊ฒฝ๋ก๋ฅผ ์ฐพ๊ณ ์ถ์ ๋ ์ฌ์ฉ

ํ (queue) ์๋ฃ๊ตฌ์กฐ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ํต์ฌ
pop(0)๋ฅผ ์ฌ์ฉํ๋ฉด ์๊ฐ ๋ณต์ก๋๊ฐ O(N)์ด ๋๋ฏ๋ก ๋นํจ์จ์ ์ธ ์ฝ๋๊ฐ ๋๊ธฐ ๋๋ฌธ์ deque๋ฅผ ์ฌ์ฉํ์ฌ ์๊ฐ ๋ณต์ก๋๋ฅผ ์ค์ผ ์ ์์
- ํ์ด์ฌ ๊ตฌํ ์์
graph_list = {1: set([3, 4]),
2: set([3, 4, 5]),
3: set([1, 5]),
4: set([1]),
5: set([2, 6]),
6: set([3, 5])}
root_node = 1
from collections import deque
def BFS_with_adj_list(graph, root):
visited = []
queue = deque([root])
while queue:
n = queue.popleft()
if n not in visited:
visited.append(n)
queue += graph[n] - set(visited)
return visited
print(BFS_with_adj_list(graph_list, root_node))
3. DFS vs BFS

DFS | BFS |
ํ์ฌ ์ ์ ์์ ๊ฐ ์ ์๋ ์ ๋ค๊น์ง ๋ค์ด๊ฐ๋ฉด์ ํ์ | ํ์ฌ ์ ์ ์ ์ฐ๊ฒฐ๋ ๊ฐ๊น์ด ์ ๋ค๋ถํฐ ํ์ |
์คํ ๋๋ ์ฌ๊ทํจ์๋ก ๊ตฌํ | ํ๋ฅผ ์ด์ฉํด์ ๊ตฌํ |
'๐ค ์๋ฃ๊ตฌ์กฐ & ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Python] ์๋ฃํ๋ณ ์๊ฐ๋ณต์ก๋(Big-O) ์ด์ ๋ฆฌ (0) | 2022.12.28 |
---|---|
[Python] Deque ์ฌ์ฉ ๋ฐฉ๋ฒ ๋ฐ ์ฌ์ฉ ์ด์ (0) | 2022.12.23 |
[Python] ์ ๋ ฌํจ์ (sort, sorted, key=lambda ํ๋ผ๋ฏธํฐ ์ด์ฉ ๋ฐฉ๋ฒ) ์ ๋ฆฌ (0) | 2022.12.04 |
[Python] Stack(์คํ) ์ด์ ๋ฆฌ (2) | 2022.11.19 |