ํฐ์คํ ๋ฆฌ ๋ทฐ
๐๏ธโ๏ธ ๊ธฐ๋ฐ ๋ค์ง๊ธฐ/์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ
์๊ณ ๋ฆฌ์ฆ: DFS์ BFS
dirmathfl 2020. 6. 16. 21:31728x90
๋ฐ์ํ
๊ทธ๋ํ ํ์ ๋ฐฉ๋ฒ
๊ทธ๋ํ๋ฅผ ํ์ํ๋ ๋ฐฉ๋ฒ์ค DFS(Depth First Search์ BFS(Breadth First Search)๋ฅผ ๊ฐ๋จํ ์์๋ฅผ ํตํด ์ดํดํ๊ณ ์ ํ๋ค. ๋ ๋ฐฉ์์ ๊ฐ๊ฐ Stack๊ณผ Queue๋ฅผ ํตํด ๊ตฌํํ ์ ์์ผ๋ฉฐ, ๊ทธ๋ํ ๋ฐฉ๋ฌธ ์ฌ๋ถ๋ฅผ ์ฒดํฌํ์ฌ ์ค๋ณต์ผ๋ก ํ์ํ๋ ๊ฒ์ ๋ฐฉ์งํ์ฌ์ผ ํ๋ค.
๊ทธ๋ํ๋ฅผ ์ฝ๋๋ก ๋ํ๋ด๊ธฐ
๊ทธ๋ฆผ 1์ ๊ทธ๋ํ์ ๋ํ ๋ ธ๋ ์ ๋ณด๋ฅผ ์ฝ๋๋ก ๋ํ๋ด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค.
graph = {
'A': ['B', 'C'],
'B': ['A', 'D'],
'C': ['A', 'E', 'F'],
'D': ['B', 'G'],
'E': ['C', 'H'],
'F': ['C'],
'G': ['D'],
'H': ['E'],
}
DFS
๊ทธ๋ฆผ 2๋ ๋ฃจํธ ๋ ธ๋๋ฅผ ์์์ผ๋ก ๋ชจ๋ ๊ทธ๋ํ ๊ฒฝ๋ก๋ฅผ ํ์ํ๋ ๊ณผ์ ์ด๋ค.
- ๋ฃจํธ ๋ ธํธ์ธ A๋ฅผ Stack์ push ํ๊ณ visited๋ก ํ์ ํ๋ค.
- A๋ฅผ popํ๊ณ A์ ์์๋ ธ๋์ธ B C๋ฅผ ์์๋๋ก stack์ push ํ๋ค.
- Stack์ LIFO์ด๋ฏ๋ก ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด top ์์น์ ์๋ ๋ ธ๋๋ค์ด ์ฐ์ ์ ์ผ๋ก ํ์๋๊ฒ ๋๋ค.
- ๋ฐ๋ผ์ DFS๋ ์์ ๋ ธ๋๋ฅผ ์์์ผ๋ก ๊น์ด ์ฐ์ ์ผ๋ก ๊ทธ๋ํ๋ฅผ ํ์ํ ์ ์๋ค.
BFS
BFS๋ DFS์ ๋ฌ๋ฆฌ FIFO๋ก ์ฒ๋ฆฌํ๋ค. ๋ฐ๋ผ์ DFS์ ๋ค๋ฅธ์ ์ Stack์ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋ Queue๋ฅผ ์ฌ์ฉํ๋ค๊ณ ์๊ฐํ๋ฉด ์ฝ๋ค.
Code
def sfs(graph, start, select):
visited = {}
lst = []
lst.append(start)
while lst:
if select == 'DFS':
node = lst.pop()
else:
node = lst.pop(0)
if node not in visited:
visited[node] = True
lst.extend(graph[node])
return visited.keys()
- ์์ ์ธ๊ธํ์๋ฏ์ด DFS์ BFS๋ ์ฌ์ฉํ๋ Stack์ ์ฌ์ฉํ์ฌ LIFO๋ก ์ฒ๋ฆฌํ๋ Queue๋ฅผ ์ฌ์ฉํ์ฌ FIFO๋ก ์ฒ๋ฆฌํ๋๋์ ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ ์ฐจ์ด์ด๋ค.
- DFS๋ While๊ณผ stack์ ํตํด ๊ตฌํํ ์๋ ์๊ณ , ์ฌ๊ท ํธ์ถ์ ํตํด ๊ตฌํํ ์๋ ์๋ค.
- ๋ ๋ฐฉ์์ ์ฐจ์ด๋ฅผ ์ฝ๊ฒ ์ดํดํ๊ธฐ ์ํด select first sort๋ผ๋ ํจ์๋ฅผ ๊ตฌํํ์๋ค.
728x90
๋ฐ์ํ
'๐๏ธโโ๏ธ ๊ธฐ๋ฐ ๋ค์ง๊ธฐ > ์๋ฃ๊ตฌ์กฐ์ ์๊ณ ๋ฆฌ์ฆ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์๋ฃ๊ตฌ์กฐ: Hash (6) | 2021.01.10 |
---|---|
์๊ณ ๋ฆฌ์ฆ: ์ ๋ ฌ (0) | 2020.06.17 |
์๊ณ ๋ฆฌ์ฆ: Recursion (0) | 2020.06.16 |
์๋ฃ๊ตฌ์กฐ: Linked List (0) | 2020.06.15 |
์๋ฃ๊ตฌ์กฐ: Queue (0) | 2020.06.15 |
๋๊ธ
๊ธ ๋ณด๊ดํจ
์ต๊ทผ์ ์ฌ๋ผ์จ ๊ธ
์ต๊ทผ์ ๋ฌ๋ฆฐ ๋๊ธ