DFS : Depth-First Search : 깊이 우선 탐색
- 스택과 재귀함수를 이용하여 구현
- 데이터의 개수가 N개 인 경우 O(N) 시간 소요
( 스택을 가로로 눕혀놨다고 생각하고 보기 ㅠ 오른쪽이 상단임..)
- 탐색 시작 노드를 스택에 삽입 & 방문처리 -> 최상단 노드에 방문하지 않은 인접노드 스택에 넣고 방문처리. 없으면 스택에서 최상단 노드 꺼내기. 반복
시작 노드 1 스택에 넣고 방문 처리 ( boolean [] visited= false; )
1
스택의 최상단 노드 1 에 방문하지 않은 인접 2, 3, 8 존재
이 중 가장 작은 2 스택에 넣고 방문 처리
1 - 2
스택의 최상단 노드 2 에 인접 1,7 중 방문하지 않은 7 스택에 넣고 방문 처리
1 - 2 - 7
스택의 최상단 노드 7 에 방문하지 않은 인접노드 6, 8 존재
가장 작은 6 스택에 넣고 방문처리
1 - 2 - 7 - 6
스택의 최상단 노드 6 에 방문하지 않은 인접 노드 없으므로 스택에서 꺼내기
1 - 2 - 7
스택의 최상단 노드 7에 방문하지 않은 인접 노드 8 존재 - 스택에 넣고 방문 처리
1 - 2 - 7 - 8
스택의 최상단 노드 8에 방문하지 않은 인접 노드 없으므로 스택에서 꺼내기
1 - 2 - 7
스택의 최상단 노드 7에 방문하지 않은 인접 노드 없으므로 스택에서 꺼내기
1 - 2
스택의 최상단 노드 2에 방문하지 않은 인접 노드 없으므로 스택에서 꺼내기
1
스택의 최상단 노드 1에 방문하지 않은 인접노드 3 스택에 넣고 방문 처리
1 - 3
스택의 최상단 노드 3에 방문하지 않은 인접노드 4, 5 중 가장 작은 4를 스택에 넣고 방문 처리
1 - 3 - 4
스택의 최상단 노드 4에 방문하지 않은 인접노드 5 스택에 넣고 방문 처리
1 - 3 - 4 - 5
남아 있는 노드에 방문하지 않은 인접 노드 없으므로 모든 노드 차례대로 꺼내기
==> 1 - 2 - 7 - 6 - 8 - 3 - 4 - 5 ( 노드의 탐색 순서)
BFS : Breadth-First Search : 너비 우선 탐색
- 가까운 노드부터 탐색하기 위하여 큐를 이용하여 구현
- 데이터의 개수가 N개 인 경우 O(N) 시간 소요 - 일반 적인 경우 실제 수행 시간은 DFS보다 좋은 편.
- 탐색 시작 노드 큐에 삽입& 방문처리 -> 큐에서 노드 꺼내 방문하지 않은 인접 노드 모두 큐에 삽입 & 방문처리. 반복
시작 노드 1 큐에 넣고 방문 처리
1
큐에서 1 꺼내고 1의 방문하지 않은 인접노드 2, 3, 8 모두 큐에 삽입 & 방문처리
2 - 3 - 8
큐에서 2 꺼내고 방문하지 않은 인접노드 7 큐에 삽입 & 방문처리
- 3 - 8 - 7
큐에서 3 꺼내고 방문하지 않은 인접노드 4, 5 큐에 삽입 & 방문처리
- - 8 - 7 - 4 - 5
큐에서 8 꺼내고 방문하지 않은 인접노드 없으므로 무시
- - - 7 - 4 - 5
큐에서 7 꺼내고 방문하지 않은 인접노드 6 큐에 삽입 & 방문처리
- - - - 4 - 5 - 6
남아있는 노드에 방문하지 않은 인접 노드 없으므로 모두 차례대로 꺼내기
- - - - - -
==> 1 - 2 - 3 - 8 - 7 - 4 - 5 - 6 ( 노드의 탐색 순서)
'공부 > Java' 카테고리의 다른 글
[Java] 자바 배열 복사하기 (0) | 2023.01.12 |
---|---|
[Java]자바의 정렬 라이브러리 Arrays.sort() / Collections.sort() / List.sort() 비교 정리 (0) | 2023.01.05 |
[Java]Comparable / Comparator 인터페이스 특징과 차이 정리 (0) | 2023.01.05 |
[Java]Java의 시간 다루기 (0) | 2022.09.04 |
[Java]파일 읽기 (0) | 2022.01.18 |
댓글