λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μ½”λ”© ν…ŒμŠ€νŠΈ/자료ꡬ쑰

[자료ꡬ쑰] κ·Έλž˜ν”„ 탐색 μ•Œκ³ λ¦¬μ¦˜: DFS/BFS

by 제룽 2023. 7. 9.
728x90
λ°˜μ‘ν˜•

 

1. 탐색

  • λ§Žμ€ μ–‘μ˜ 데이터 μ€‘μ—μ„œ μ›ν•˜λŠ” 데이터λ₯Ό μ°ΎλŠ” 과정을 일컫음
  • λŒ€ν‘œμ μΈ κ·Έλž˜ν”„ 탐색 μ•Œκ³ λ¦¬μ¦˜ : DFS , BFS

2. DFS(Depth-First Search)

  • 깊이 μš°μ„  탐색
  • κ·Έλž˜ν”„μ—μ„œ κΉŠμ€ 뢀뢄을 μš°μ„ μ μœΌλ‘œ νƒμƒ‰ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μ„ μ˜λ―Έν•¨
  • μŠ€νƒ 자료ꡬ쑰 or μž¬κ·€ν•¨μˆ˜ ν™œμš©
  • κΌ­ μ΄μ§„νŠΈλ¦¬μΌ ν•„μš”κ°€ μ—†μŒ!
  1. 탐색 μ‹œμž‘ λ…Έλ“œλ₯Ό μŠ€νƒμ— μ‚½μž… ν›„, λ°©λ¬Έ 처리
  1. μŠ€νƒμ˜ μ΅œμƒλ‹¨ λ…Έλ“œμ— λ°©λ¬Έν•˜μ§€ μ•Šμ€ μΈμ ‘ν•œ λ…Έλ“œκ°€ ν•˜λ‚˜λΌλ„ 있으면 κ·Έ λ…Έλ“œλ₯Ό μŠ€νƒμ— λ„£κ³  λ°©λ¬Έ 처리. λ°©λ¬Έν•˜μ§€ μ•Šμ€ 인접 λ…Έλ“œκ°€ μ—†μœΌλ©΄ μŠ€νƒμ—μ„œ μ΅œμƒλ‹¨ λ…Έλ“œλ₯Ό 꺼냄
  1. 더 이상 2번의 과정을 μˆ˜ν–‰ν•  수 없을 λ•ŒκΉŒμ§€ 반볡
def dfs(graph, v, visited):     visited[v] =True     print(v, end=' ')     for i in graph[v]: #2,3,8 (κ·Έλž˜ν”„ μ•ˆμ˜ κ°’λ“€ (μΈμ ‘ν•œ λ…Έλ“œλ“€μ„ 의미))         if not visited[i]:             dfs(graph,i,visited)
graph=[     [],     [2,3,8], #1λ²ˆλ…Έλ“œμ™€ μΈμ ‘ν•œ λ…Έλ“œλ“€     [1,7], #2번 λ…Έλ“œμ™€ μ—°κ²°λœ λ…Έλ“œ     [1,4,5],     [3,5],     [3,4],     [7],     [2,6,8],     [1,7] ]  visited= [False]*9  dfs(graph,1,visited)

3. BFS(Breath-First Search)

  • λ„ˆλΉ„ μš°μ„  탐색
  • κ°€κΉŒμš΄ λ…Έλ“œλΆ€ν„° μš°μ„ μ μœΌλ‘œ νƒμƒ‰ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜
  • 큐 자료ꡬ쑰λ₯Ό ν™œμš©
  1. 탐색 μ‹œμž‘ λ…Έλ“œλ₯Ό 큐에 μ‚½μž…ν•˜κ³  λ°©λ¬Έ 처리
  1. νμ—μ„œ λ…Έλ“œλ₯Ό κΊΌλ‚Έ λ’€, ν•΄λ‹Ή λ…Έλ“œμ˜ 인접 λ…Έλ“œ μ€‘μ—μ„œ λ°©λ¬Έν•˜μ§€ μ•Šμ€ λ…Έλ“œλ₯Ό λͺ¨λ‘ 큐에 μ‚½μž… ν›„, λ°©λ¬Έ 처리
  1. 더 이상 2번의 과정을 μˆ˜ν–‰ν•  수 없을 λ•ŒκΉŒμ§€ 반볡

728x90
λ°˜μ‘ν˜•