pnosong.log
로그인
pnosong.log
로그인
DFS, BFS
송호민
·
2022년 2월 8일
팔로우
0
BFS
DFS
그래프
0
그래프 표현 방식
1. 인접 행렬
2차원 배열을 이용해 그래프를 표현
행 번호는 노드의 번호를 의미, 열 번호는 노드와 연결된 노드들에 대한 정보를 의미
열결되어 있으면 1, 연결되어 있지 않으면 0으로 표현
장점
구현이 쉽다.
연결 여부를 확인하기 용이하다.
단점
노드와 연결된 모든 노드들에 방문해보고 싶을 때 행렬의 모든 인덱스를 0인지 1인지 확인해야 하므로 시간 복잡도가 크다.
2. 인접 리스트
연결 리스트를 이용하여 그래프를 구현
array[i]가 노드 i에 연결된 노드들을 원소로 갖는 리스트를 의미. array[i]는 그래프의 원소.
DFS(깊이 우선 탐색)
그래프 전체를 탐색하는 방법 중 하나
시작 노드에서 다음 분기로 넘어가기 전에 해당 분기에 대한 탐색을 완료하고 넘어가는 방법
재귀함수나 스택으로 구현
Logic
시작 노드를 스택에 삽입하고 방문처리
스택의 최상단의 노드에 방문하지 않은 인접한 노드가 하나라도 있으면 그 노드를 스택에 넣고 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다
2번 과정을 반복
노드를 방문할 때 방문여부를 표시해주어야 한다.
장점
로직에서 하나의 경로만을 기억하므로 저장공간의 수요가 비교적 적다.
찾으려고 하는 노드가 깊은 단계에 있는 경우 빨리 구할 수 있다.
단점
해가 없는 경로에 깊이 빠질 가능성이 있다.
얻어진 해가 최단 경로가 아닐 수 있다.(목표에 이르는 경로가 다수인 경우 DFS는 해에 다다르면 탐색을 종료하므로 항상 최적인 경로를 찾을 수는 없다.)
해가 없는 경로가 깊을 경우 탐색시간이 오래 걸릴 수 있다.
BFS(너비 우선 탐색)
시작 노드를 방문한 후 시작 노드에 있는 인접한 모든 노드들을 우선 탐색하는 방법(그래프에서 가장 가까운 노드부터 우선적으로 탐색)
큐를 사용하여 구현(재귀함수로는 구현할 수 없다.)
최단 경로 알고리즘을 계산할 때 사용
Logic
탐색 시작 노드를 큐에 삽입하고 방문 처리
큐에서 노드를 꺼낸 뒤에 해당 노드의 인접 노드 중 방문하지 않은 노드를 모두 큐에 삽입 후 방문 처리
2번 과정을 반복
장점
출발노드에서 목표노드까지의 최단 경로를 찾을 수 있다.
단점
경로가 긴 경우에는 탐색을 하는데 사용되는 가지가 급격하게 많아지므로 많은 기억 공간을 필요로 한다.
송호민
.
팔로우
이전 포스트
데이터 분석
다음 포스트
해시 알고리즘 (hash algorithm)
0개의 댓글
댓글 작성