BFSλ?
- νλ₯Ό ν΅ν΄ ꡬνμ΄ κ°λ₯νλ€.
- λ Έλλ₯Ό λ°©λ¬Ένλ©΄μ μΈμ ν λ Έλ μ€ λ°©λ¬Ένμ§ μμλ λ Έλμ μ λ³΄λ§ νμ λ£κ³ , νμ΄ λ€μ΄μλ λ ΈλλΆν° λ°©λ¬Ένλ€.
- νμ΄μ¬μμ νλ₯Ό ꡬνν λ, listλ₯Ό μ¬μ©νλ κ²½μ°κ° λλΆλΆμΈλ°. list.pop(0)μ μκ°λ³΅μ‘λκ° O(N)μ΄κΈ° λλ¬Έμ μ΄λ κ² κ΅¬νν κ²½μ° μκ°μ μΌλ‘ λΉν¨μ¨μ μ΄λ€. λ°λΌμ collections λΌμ΄λΈλ¬λ¦¬μ dequeλ₯Ό μ¬μ©νλ©΄ μκ°μ μ μ½ν μ μλ€.
- λν μΈμ ν λ Έλ μ€ λ°©λ¬Ένμ§ μμλ λ Έλλ₯Ό νμ λ£μ λλ set λ°μ΄ν° νμ μ μ΄μ©νλ©΄ μ½κ² ꡬνν μ μλ€.
νμ΄ν μ λ ₯λΆλΆ2
BFS ꡬν
- λμ κ³Όμ
1) root λ ΈλλΆν° μμνκΈ° μν΄ dequeμ rootλ₯Ό λ£λλ€.
2) νκ° λΉ λκΉμ§ loopλ₯Ό λλ¦°λ€.
3) νμ 맨μ λ Έλλ₯Ό κΊΌλΈλ€. (pop)
4) ν΄λΉ λ Έλκ° λ°©λ¬Έ 리μ€νΈ(visited)μ μλ€λ©΄ μΆκ°νκ³ , ν΄λΉ λ Έλμ μμ λ Έλλ₯Ό νμ λ£λλ€.
from collections import 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
def bfs(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(graph_list, root_node))
μ°Έκ³
1.commons.wikimedia.org/wiki/File:Breadth-First-Search-Algorithm.gif
File:Breadth-First-Search-Algorithm.gif - Wikimedia Commons
commons.wikimedia.org
'ΰ¨βββ Studyβββΰ§ > β Algorithm' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[python] μμ΄κ³Ό μ‘°ν© (0) | 2021.07.20 |
---|---|
[python] bisect (0) | 2021.06.04 |
[μκ³ λ¦¬μ¦] DFS(Depth First Search, κΉμ΄ μ°μ νμ) (0) | 2021.05.04 |
[Python] μ λ ¬ μκ³ λ¦¬μ¦ (0) | 2021.04.19 |
[Python] tuple (0) | 2021.04.06 |