Notice
Recent Posts
Recent Comments
Link
250x250
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
Tags
- 찬양
- 프론트엔드
- 혼자공부하는sql
- SQL
- CHEMISTRY
- 날솟샘
- 설교
- 고윤민교수님
- 컴네
- QT
- 네트워킹
- 유태준교수님
- Database
- CCM
- 날마다 솟는 샘물
- computer networks and the internet
- 전산전자공학부
- GLS
- 글로벌리더십학부
- 화학
- dbms
- csee
- 어노인팅
- 데이터베이스
- 한동대학교
- 일반화학
- 묵상
- SQLD
- FE
- 예배
Archives
- Today
- Total
멈추지 않는 기록
[알고리즘] 그래프란? 본문
728x90
그래프란?
그래프는 여러 개의 점(정점)과 선(간선)으로 이루어진 자료구조이다. 현실 세계에서 사람과 사람의 관계, 도로 지도, 지하철 노선도 등을 그래프로 표현할 수 있다.
간단히 말하면, “노드끼리 연결된 관계를 표현하는 자료구조”이다.
그래프 구성 요소
- 정점(Vertex)
: 데이터를 표현하는 점. 노드(Node)라고도 부른다. - 간선(Edge)
: 정점과 정점을 연결하는 선. 관계 또는 경로. - 방향 그래프(Directed Graph)
: 간선에 방향이 있는 그래프. A → B처럼 단방향. - 무방향 그래프(Undirected Graph)
: 간선에 방향이 없는 그래프. A와 B가 서로 연결됨. - 가중치 그래프(Weighted Graph)
: 간선마다 비용, 거리 등이 있는 그래프. 예: 지하철 노선 거리.
그래프를 표현하는 방법
방법 | 설명 | 사용 경우 |
인접 행렬(Adjacency Matrix) | 2차원 배열로 노드 연결 여부를 표시 (1 또는 0). | 연결 확인은 빠르지만 메모리 사용 많음. |
인접 리스트(Adjacency List) | 배열 안에 연결된 노드들을 리스트로 저장. | 메모리 효율적. 보통 실무에서 많이 사용. |
그래프에서 자주 사용하는 용어
- 정점(Vertex)
: 데이터가 저장된 점 - 간선(Edge)
: 정점끼리 연결된 선 - 인접(Adjacent)
: 서로 연결된 상태 - 경로(Path)
: 한 정점에서 다른 정점으로 이동하는 길 - 사이클(Cycle)
: 시작한 정점으로 다시 돌아오는 경로 - 연결 요소(Connected Component)
: 서로 연결된 정점들의 묶음 - 트리(Tree)
: 사이클이 없는 그래프 - 탐색(Traversal)
: 그래프의 노드를 한 번씩 방문하는 과정
DFS란?
DFS(Depth-First Search, 깊이 우선 탐색)는 가능한 한 깊게 들어가서 탐색하는 방식이다. 하나의 경로를 끝까지 따라가면서 탐색한 뒤, 더 이상 갈 곳이 없으면 되돌아와서 다른 경로를 탐색한다.
-> 간단히 말하면, “한 경로를 끝까지 파고드는 방식”
1) 특징
- 한 경로를 끝까지 탐색
- 모든 경로 확인, 경우의 수 찾기에 유리
- 백트래킹, 경로 찾기 문제에서 자주 사용됨
- 보통 재귀 함수 또는 스택으로 구현
2) DFS 예시 코드 (JavaScript)
// DFS 재귀 함수
function dfs(node) {
visited[node] = true;
graph[node].forEach(next => {
if (!visited[next]) {
dfs(next);
}
});
}
BFS란?
BFS(Breadth-First Search, 너비 우선 탐색)는 가까운 노드부터 넓게 탐색하는 방식이다. 시작 노드에서 인접한 노드를 모두 탐색한 후, 그다음 단계의 노드를 탐색한다.
-> 간단히 말하면, “가까운 노드부터 하나씩 넓게 퍼지는 방식”
1) 특징
- 최단 경로 문제에서 많이 사용됨
- 모든 노드를 골고루 탐색
- 큐(Queue)를 사용하여 구현
2) BFS 예시 코드 (JavaScript)
// BFS 함수
function bfs(start) {
const queue = [start];
visited[start] = true;
while (queue.length) {
const current = queue.shift();
graph[current].forEach(next => {
if (!visited[next]) {
visited[next] = true;
queue.push(next);
}
});
}
}
DFS와 BFS의 차이
- DFS는 한 경로를 끝까지 들어가면서 탐색하는 방식이다.
- BFS는 가까운 노드부터 하나씩 넓게 탐색하는 방식이다.
-> 경로의 깊이를 따라가야 할 때는 DFS를 사용하고, 최단 경로를 찾거나 골고루 탐색해야 할 때는 BFS를 사용하면 된다.
-> 그래프 탐색을 이해하고 있으면 경로 찾기, 최단 거리, 네트워크 구성 등 다양한 문제를 효율적으로 해결할 수 있다.
728x90
'개발 > 🕸️ 알고리즘' 카테고리의 다른 글
[알고리즘] 개발자가 알아야 할 핵심 알고리즘 10선 (공유용) (1) | 2025.07.27 |
---|---|
[알고리즘] DP란? (0) | 2025.07.15 |