그래프는 아이템들과 이들 사이의 연결 관계를 표현하는 비선형 자료구조입니다. 그래프의 각 요소를 '정점(Vertex)'라고 하고, 이들 사이를 연결하는 것을 '간선(Edge)'이라고 합니다.
그래프는 리스트나 스택, 큐와 같은 선형 자료구조나 트리 자료구조로 표현하기 어려운 N : N 관계를 가지는 원소들을 표현하기에 용이합니다.
방식 | 특징 | 장단점 |
---|---|---|
인접 행렬 (Adjacency Matrix) | n×n 2차원 배열에 가중치 저장 | 연결 여부를 한눈에 파악 가능 희소 그래프엔 메모리 낭비 |
인접 리스트 (Adjacency List) | 각 정점이 (이웃, 가중치) 목록 보유 | 메모리 효율적·특정 정점의 이웃 탐색 용이 |
그래프 순회는 비선형구조인 그래프로 표현된 모든 자료(정점)을 빠짐없이 탐색(완전탐색)하는 것을 의미합니다. 그래프 순회 방법에는 두 가지 방법이 존재하는데, 바로 깊이 우선 탐색(Depth First Search, DFS)과 너비 우선 탐색(Breadth First Search, BFS)입니다.
깊이 우선 탐색은 시작 정점의 한 방향으로부터 갈 수 있는 경로가 있는 곳까지 깊이 탐색하다가 더 이상 이동할 곳이 없으면, 가장 마지막에 만났던 갈림길 간선이 있는 정점으로 돌아와 다른 방향의 정점으로 탐색을 계속 반복하여 결국 모든 정점을 방문하는 순회 방법입니다.
가장 마지막에 만났던 갈림길의 정점으로 되돌아가야 하므로 후입선출 구조인 스택을 사용하는 것이 구현에 용이합니다. 또는 재귀 호출이 콜 스택에 저장해놓는 방식으로 동작하므로, 재귀 호출을 활용하는 것도 구현에 용이합니다.
그래프를 레벨-순으로 탐색하는 알고리즘
큐(Queue)를 사용해 같은 레벨의 정점들을 먼저 방문하고, 그다음 레벨로 넘어감
무가중치 그래프에서 최단 경로(edge = 1 cost) 를 찾을 때 자주 쓰임
시간 복잡도 O(V + E)
(정점 + 간선), 공간 복잡도는 방문 여부 저장 + 큐 크기
https://velog.io/@tomato2532/%EA%B7%B8%EB%9E%98%ED%94%84
https://wikidocs.net/133051