A. 그래프와 알고리즘
1. DFS
a. DFS란?
🌟 Depth First Search, 깊이를 우선으로 파고 들어가는 검색방법
b. DFS 생성하기
1) 인접 리스트
재귀함수로 생성가능 = 스택을 이용
2) 인접 행렬
c. 모든 정점을 둘러보기
위 코드를 실행해보면 5번 정점에 대한 데이터는 얻을 수 없음 (데이터 방향이 단방향)
따라서 모든 정점에 대한 반복문을 돌려주면 모든 정점을 둘러볼 수 있음
d. 시간복잡도(BFS랑 똑같음)
1) 인접 리스트일 경우
모든 정점마다 한번씩 함수에 호출 (v) + 간선의 총 개수 (e)
간선의 총 개수는 e지만 모든 정점들이 연결되어 있으면 자체가 v제곱이 될 수 있음
따라서 간선이 드문드문 연결되어있는 데이터에 적합함!!
2) 인접 행렬일경우
정점마다 한번씩 함수에 들어오고 (v) * for문을 v번만큼 하기 때문(v) = v제곱
2. BFS
a. BFS란?
🌟 "Breath First Search" 너비우선탐색
- 입구에서 얼마나 떨어져있는지, 즉 가까운 순서대로 접근
- 가장 빠르게 발견한걸 먼저 방문 = 선입 선출 = 큐
b. BFS 생성하기
큐를 사용해서 생성
1) 인접 리스트로 생성
dfs에서는 visited를 사용해 방문한 목록을 체크했지만
bfs에서는 discovered를 사용해 발견한 목록을 체크함
2) 인접 행렬로 생성
c. 모든 정점 둘러보기
d. 길찾기를 위한 추가적인 정보 넣어주기
- 누구에 의해서 발견 되었는지 : parent
- 시작점에서 얼만큼 떨어져 있는지 : dist
'자료구조와 알고리즘 > Algorithm' 카테고리의 다른 글
분할 정복(Divide and Conquer) 알고리즘 1 : 이진 탐색 (Binary Search) (0) | 2024.02.22 |
---|---|
[게임 프로그래머 입문 올인원] A* 길찾기 알고리즘 + Maze project (62강) (0) | 2024.02.19 |
[게임 프로그래머 입문 올인원] 다익스트라 (61강) (0) | 2024.02.19 |
[게임 프로그래머 입문 올인원] 선형 자료구조 : 시간복잡도 (49강) (0) | 2024.02.14 |
[정렬 알고리즘] 버블 소팅 (0) | 2023.09.08 |