BFS, DFS - goorm-6th-Als/for_study_Algorithm GitHub Wiki

κ·Έλž˜ν”„ 탐색 (BFS, DFS)

BFS : λ„ˆλΉ„ μš°μ„  탐색 (Breadth-First Search)

  • λͺ¨λ“  정점을 λ°œκ²¬ν•˜λŠ” κ°€μž₯ λ‹¨μˆœν•˜κ³  고전적인 방법이닀.

  • ν˜„μž¬ 정점과 μΈμ ‘ν•œ 간선듀을 ν•˜λ‚˜μ”© κ²€μ‚¬ν•˜λ‹€κ°€, 아직 λ°©λ¬Έν•˜μ§€ μ•Šμ€ μ •μ μœΌλ‘œ ν–₯ν•˜λŠ” 간선이 μžˆλ‹€λ©΄ κ·Έ 간선을 무쑰건 따라간닀. 더이상 갈 곳이 μ—†λŠ” λ§‰νžŒ 정점에 λ„λ‹¬ν•˜λ©΄ ν¬κΈ°ν•˜κ³ , λ§ˆμ§€λ§‰μ— λ”°λΌμ™”λ˜ 간선을 λ’€λŒμ•„κ°„λ‹€.

  • DFS ν•˜λ‚˜μ— for loop을 Nλ²ˆμ„ νƒμƒ‰ν•˜κΈ° λ•Œλ¬Έμ— O(N) , 정점을 λ°©λ¬Έν•  λ•Œ λ§ˆλ‹€ DFSλ₯Ό λΆ€λ₯΄λŠ”데, N개의 정점을 λͺ¨λ‘ λ°©λ¬Έν•˜λ―€λ‘œ O(N) 이닀. λ”°λΌμ„œ 인접행렬 DFS의 전체 μ‹œκ°„λ³΅μž‘λ„ = N * O(N) = O(N^2) 이닀

깊이 μš°μ„  탐색은 νƒμƒ‰μ˜ 각 κ³Όμ •μ—μ„œ κ°€λŠ₯ν•œ ν•œ κ·Έλž˜ν”„ μ•ˆμœΌλ‘œ 깊이 λ“€μ–΄κ°€λ €κ³  μ‹œλ„ν•˜λ©°, λ§‰νžŒ 정점에 λ„λ‹¬ν•˜μ§€ μ•ŠλŠ” ν•œ λ’€λ‘œ λŒμ•„κ°€μ§€ μ•ŠλŠ”λ‹€.

DFS : 깊이 μš°μ„  탐색 (Depth-First Search)

  • λ‹€μ΅μŠ€νŠΈλΌ, ν”„λ¦Ό μ•Œκ³ λ¦¬μ¦˜μ€ BFSλ₯Ό κ·Όκ°„μœΌλ‘œ 이루어진 μ•Œκ³ λ¦¬μ¦˜μ΄λ‹€.
  • DFS에 λΉ„ν•΄ λ™μž‘ 과정은 비ꡐ적 μ΄ν•΄ν•˜κΈ° 쉽닀.

λ„ˆλΉ„ μš°μ„  탐색은 각 정점을 λ°©λ¬Έν•  λ•Œλ§ˆλ‹€ λͺ¨λ“  인접 정점듀을 κ²€μ‚¬ν•œλ‹€. 이 쀑 처음 λ³΄λŠ” 정점을 λ°œκ²¬ν•˜λ©΄ 이 정점을 λ°©λ¬Έ μ˜ˆμ •μ΄λΌκ³  기둝해 λ‘” λ’€, λ³„λ„μ˜ μœ„μΉ˜μ— μ €μž₯ν•œλ‹€. μΈμ ‘ν•œ 정점을 λͺ¨λ‘ κ²€μ‚¬ν•˜κ³  λ‚˜λ©΄, μ§€κΈˆκΉŒμ§€ μ €μž₯ν•œ λͺ©λ‘μ—μ„œ λ‹€μŒ 정점을 κΊΌλ‚΄μ„œ λ°©λ¬Έν•˜κ²Œ λœλ‹€.

  • λ”°λΌμ„œ λ„ˆλΉ„ μš°μ„  νƒμƒ‰μ˜ λ°©λ¬Έ μˆœμ„œλŠ” μ •μ μ˜ λͺ©λ‘μ—μ„œ μ–΄λ–€ 정점을 λ¨Όμ € κΊΌλ‚΄λŠ”μ§€μ— μ˜ν•΄ κ²°μ •λœλ‹€.

λͺ¨λ“  정점은 세가지 μƒνƒœλ₯Ό 거치게 λœλ‹€.

  1. 아직 λ°œκ²¬λ˜μ§€ μ•Šμ€ μƒνƒœ (!check[i])
  2. λ°œκ²¬λ˜μ—ˆμ§€λ§Œ λ°©λ¬Έν•˜μ§€ μ•Šμ€ μƒνƒœ
  3. 방문된 μƒνƒœ (check[i])

BFS / DFS μ–Έμ œ μ–΄λŠ 것을 μ‚¬μš©ν•΄μ•Όν•˜λ‚˜?

각각의 μž₯단점이 μžˆμœΌλ―€λ‘œ 문제의 μœ ν˜•μ„ 잘 νŒŒμ•…ν•˜κ³  그에 μ ν•©ν•œ 방식을 λŒ€μž…ν•˜λŠ” 것이 μ€‘μš”ν•˜λ‹€

  • λͺ¨λ“  λ…Έλ“œλ₯Ό λ°©λ¬Έν•˜κ³ μž ν•˜λŠ” κ²½μš°μ— DFSλ₯Ό 선택함
  • 깊이 μš°μ„  탐색(DFS)이 λ„ˆλΉ„ μš°μ„  탐색(BFS)보닀 μ’€ 더 간단함
  • 검색 속도 μžμ²΄λŠ” λ„ˆλΉ„ μš°μ„  탐색(BFS)이 더 빠름

λ”°λΌμ„œ

  • 검색 λŒ€μƒ κ·Έλž˜ν”„κ°€ 정말 크닀면 DFS (κΉŠμ΄μš°μ„ )
  • 검색 λŒ€μƒμ˜ 규λͺ¨κ°€ 크지 μ•Šκ³ , 검색 μ‹œμž‘ μ§€μ μœΌλ‘œλΆ€ν„° μ›ν•˜λŠ” λŒ€μƒμ΄ λ³„λ‘œ 멀지 μ•Šλ‹€λ©΄ BFS (λ„ˆλΉ„μš°μ„ )을 μ„ νƒν•˜μž.

| 탐색 κ³Όμ • μ˜ˆμ‹œ

dfs,bfs

DFS_BFS