λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

πŸ’»/Algorithm

μ™„μ „ 탐색/DFS/BFS

μ™„μ „ 탐색 (브루트 포슀)

  • κ°€λŠ₯ν•œ λͺ¨λ“  경우의 수λ₯Ό λ‹€ μ‹œλ„ν•΄ 닡을 μ°ΎλŠ” 방법
  • μ •ν™•ν•˜κ³  ν™•μ‹€ν•˜κ²Œ 닡을 찾을 μˆ˜λŠ” μžˆμ§€λ§Œ, μ‹œκ°„μ΄ 였래 κ±Έλ¦°λ‹€.
  • λͺ¨λ“  경우의 수λ₯Ό κ΅¬ν•˜λŠ” 문제 같은 λΆ€λΆ„μ—μ„œ 많이 μ‚¬μš©λ˜λŠ” μ•Œκ³ λ¦¬μ¦˜

- μ™„μ „ 탐색 기법 μ’…λ₯˜

 

DFS(깊이 μš°μ„  탐색)

: 루트 λ…Έλ“œμ—μ„œ μ‹œμž‘ν•΄μ„œ λ‹€μŒ λΆ„κΈ°(branch)둜 λ„˜μ–΄κ°€κΈ° 전에 ν•΄λ‹Ή λΆ„κΈ°λ₯Ό μ™„λ²½ν•˜κ²Œ νƒμƒ‰ν•˜λŠ” 방법

 

μ–΄λ–€ λ…Έλ“œλ₯Ό λ°©λ¬Έν–ˆμ—ˆλŠ”μ§€ μ—¬λΆ€λ₯Ό λ°˜λ“œμ‹œ 검사 

  • 1. μˆœν™˜ 호좜 이용(자기 μžμ‹ μ„ ν˜ΈμΆœν•˜λŠ”μˆœν™˜ μ•Œκ³ λ¦¬μ¦˜μ˜ ν˜•νƒœ)
  • 2. λͺ…μ‹œμ μΈ μŠ€νƒ μ‚¬μš©
    • λͺ…μ‹œμ μΈ μŠ€νƒμ„ μ‚¬μš©ν•˜μ—¬ λ°©λ¬Έν•œ 정점듀을 μŠ€νƒμ— μ €μž₯ν•˜μ˜€λ‹€κ°€ λ‹€μ‹œ κΊΌλ‚΄μ–΄ μž‘μ—…ν•œλ‹€.
  • μ‚¬μš©ν•˜λŠ” 경우: λͺ¨λ“  λ…Έλ“œλ₯Ό λ°©λ¬Έ ν•˜κ³ μž ν•˜λŠ” κ²½μš°μ— 이 방법을 μ„ νƒν•œλ‹€.
  • 깊이 μš°μ„  탐색(DFS)이 λ„ˆλΉ„ μš°μ„  탐색(BFS)보닀 μ’€ 더 κ°„λ‹¨ν•˜λ‹€.
  • λ‹¨μˆœ 검색 속도 μžμ²΄λŠ” λ„ˆλΉ„ μš°μ„  탐색(BFS)에 λΉ„ν•΄μ„œ λŠλ¦¬λ‹€. 
  • λ„ˆλΉ„ μš°μ„  탐색(BFS)이 깊이 μš°μ„  탐색(DFS)보닀 μ’€ 더 λ³΅μž‘ν•˜λ‹€.

BFS(λ„ˆλΉ„ μš°μ„  탐색)

: μ‹œμž‘ μ •μ μœΌλ‘œλΆ€ν„° κ°€κΉŒμš΄ 정점을 λ¨Όμ € λ°©λ¬Έν•˜κ³  멀리 λ–¨μ–΄μ Έ μžˆλŠ” 정점을 λ‚˜μ€‘μ— λ°©λ¬Έν•˜λŠ” 순회 방법

 

μ‚¬μš©ν•˜λŠ” 경우: λ‘ λ…Έλ“œ μ‚¬μ΄μ˜ μ΅œλ‹¨ 경둜 ν˜Ήμ€ μž„μ˜μ˜ 경둜λ₯Ό μ°Ύκ³  싢을 λ•Œ μ΄ 방법을 μ„ νƒν•œλ‹€

 

  • BFSλŠ” μž¬κ·€μ μœΌλ‘œ λ™μž‘ν•˜μ§€ μ•ŠλŠ”λ‹€.
  • BFSλŠ” λ°©λ¬Έν•œ λ…Έλ“œλ“€μ„ μ°¨λ‘€λ‘œ μ €μž₯ν•œ ν›„ κΊΌλ‚Ό 수 μžˆλŠ” 자료 ꡬ쑰인 ν(Queue)λ₯Ό μ‚¬μš©ν•œλ‹€.
    • 즉, μ„ μž…μ„ μΆœ(FIFO) μ›μΉ™μœΌλ‘œ 탐색
    • 일반적으둜 큐λ₯Ό μ΄μš©ν•΄μ„œ 반볡적 ν˜•νƒœλ‘œ κ΅¬ν˜„ν•˜λŠ” 것이 κ°€μž₯ 잘 λ™μž‘ν•œλ‹€.

 

 

 

 

좜처: https://github.com/WeareSoft/tech-interview/blob/master/contents/algorithm.md#dfs%EC%99%80-bfs%EC%9D%98-%EC%B0%A8%EC%9D%B4

'πŸ’» > Algorithm' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

νž™(Heap)  (0) 2022.06.12
μ†Œμˆ˜_μ—λΌν† μŠ€ν…Œλ„€μŠ€μ˜ 체  (0) 2022.06.12
μ΅œλŒ€ κ³΅μ•½μˆ˜_μœ ν΄λ¦¬λ“œ ν˜Έμ œλ²•  (0) 2022.06.12
char to int / ASCII CODE  (0) 2022.04.19
Stack/Queue/Deque/PriorityQueue  (0) 2022.04.11