Guidelines

깊이 μš°μ„  탐색(DFS)μ΄λž€?

깊이 μš°μ„  탐색은 κ·Έλž˜ν”„ λ˜λŠ” 트리λ₯Ό 탐색할 λ•Œ, ν•œ λ…Έλ“œμ—μ„œ μ‹œμž‘ν•˜μ—¬ 각 λΆ„κΈ°λ₯Ό κ°€λŠ₯ν•œ ν•œ 깊게 νƒμƒ‰ν•˜λŠ” μ•Œκ³ λ¦¬μ¦˜μž…λ‹ˆλ‹€.


ν‚€μ›Œλ“œ

  • μŠ€νƒ(Stack): DFSλŠ” μŠ€νƒμ„ μ‚¬μš©ν•˜μ—¬ 이미 λ°©λ¬Έν•œ λ…Έλ“œλ₯Ό μΆ”μ ν•©λ‹ˆλ‹€.

  • μž¬κ·€(Recursion): μŠ€νƒμ„ λͺ…μ‹œμ μœΌλ‘œ μ‚¬μš©ν•˜μ§€ μ•Šκ³ , μž¬κ·€ ν˜ΈμΆœμ„ 톡해 κ΅¬ν˜„λ  수 μžˆμŠ΅λ‹ˆλ‹€.

  • 경둜 탐색: DFSλŠ” μ‹œμž‘ λ…Έλ“œμ—μ„œ λͺ©ν‘œ λ…Έλ“œκΉŒμ§€μ˜ 경둜λ₯Ό μ°ΎλŠ”λ° 자주 μ‚¬μš©λ©λ‹ˆλ‹€.

  • μ‹œκ°„ λ³΅μž‘λ„: (O(|V| + |E|)), μ—¬κΈ°μ„œ (|V|)λŠ” μ •μ μ˜ 수, (|E|)λŠ” κ°„μ„ μ˜ μˆ˜μž…λ‹ˆλ‹€.


DFS의 단계별 κ³Όμ •

  1. λ…Έλ“œ 선택: 탐색을 μ‹œμž‘ν•  λ…Έλ“œλ₯Ό μ„ νƒν•©λ‹ˆλ‹€.

  2. λ°©λ¬Έ 및 탐색: μ„ νƒν•œ λ…Έλ“œλ₯Ό λ°©λ¬Έν•˜κ³ , μΈμ ‘ν•œ λ…Έλ“œ 쀑 λ°©λ¬Έν•˜μ§€ μ•Šμ€ λ…Έλ“œλ‘œ μ΄λ™ν•©λ‹ˆλ‹€.

  3. μž¬κ·€μ  탐색: 각 λ…Έλ“œμ—μ„œ μž¬κ·€μ μœΌλ‘œ DFSλ₯Ό μˆ˜ν–‰ν•˜μ—¬, κ°€λŠ₯ν•œ 깊게 νƒμƒ‰ν•©λ‹ˆλ‹€.

  4. 탐색 μ™„λ£Œ: 더 이상 λ°©λ¬Έν•  λ…Έλ“œκ°€ 없을 λ•Œ 탐색을 μ’…λ£Œν•©λ‹ˆλ‹€.


DFS의 νŠΉμ§•

  • 깊이 μš°μ„ : 각 λΆ„κΈ°λ₯Ό λκΉŒμ§€ νƒμƒ‰ν•œ 후에 λ‹€λ₯Έ λΆ„κΈ°λ‘œ λ„˜μ–΄κ°‘λ‹ˆλ‹€.

  • λ°±νŠΈλž˜ν‚Ή(Backtracking): 이미 λ°©λ¬Έν•œ λ…Έλ“œλ‚˜ 경둜λ₯Ό λ˜λŒμ•„κ°€λ©΄μ„œ λ‹€λ₯Έ 경둜λ₯Ό νƒμƒ‰ν•©λ‹ˆλ‹€.

  • λΉ„μˆœν™˜ κ·Έλž˜ν”„(Non-Cyclic Graphs): DFSλŠ” λΉ„μˆœν™˜ κ·Έλž˜ν”„μ—μ„œ λͺ¨λ“  λ…Έλ“œλ₯Ό λ°©λ¬Έν•˜λŠ” 데 νš¨κ³Όμ μž…λ‹ˆλ‹€.

  • 탐색 μˆœμ„œ: λ…Έλ“œμ˜ 탐색 μˆœμ„œλŠ” κ·Έλž˜ν”„μ˜ ꡬ쑰와 μ‹œμž‘ λ…Έλ“œμ— 따라 λ‹¬λΌμ§‘λ‹ˆλ‹€.


DFS의 μž₯단점

  • μž₯점: κ°„λ‹¨ν•˜κ³ , λͺ¨λ“  λ…Έλ“œλ₯Ό λ°©λ¬Έν•˜λŠ” 것을 보μž₯ν•©λ‹ˆλ‹€. λ©”λͺ¨λ¦¬ μ‚¬μš©μ΄ μƒλŒ€μ μœΌλ‘œ μ μŠ΅λ‹ˆλ‹€.

  • 단점: μ΅œλ‹¨ 경둜λ₯Ό μ°ΎλŠ”λ°λŠ” μ ν•©ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€. μˆœν™˜ κ²½λ‘œκ°€ μžˆλŠ” κ·Έλž˜ν”„μ—μ„œλŠ” λ¬΄ν•œ 루프에 빠질 μœ„ν—˜μ΄ μžˆμŠ΅λ‹ˆλ‹€.

Guidelines

AI Tutor

Publish

Design

Upload

Notes

Favorites

Help