CS/자료구조

[자료구조] 비선형 자료구조 2탄 : 그래프

개발중인 감자 2023. 8. 12. 15:04

1. 그래프의 개념 

 

 

 

정점과 간선으로 이루어진 자료구조이다. 트리도 일종의 그래프이다. 

하지만 트리와는 다르게 루트 노드, 부모와 자식이라는 개념이 존재하지 않으며 네트워크 모델 즉 객체와 이에 관계를 나타내는 방식이다.

 

 

 

간선의 방향성에 따라 무방향 그래프 혹은 방향 그래프로 나눌 수 있다. 

 

 

📌 그래프의 용어들 

정점, 노드 : 데이터가 저장되는 곳 
간선 : 노드간의 관계
차수 : 무방향 그래프에서 하나의 정점에서 인접한 간선의 수
진출 차수 : 방향 그래프에서 한 노드에서 외부로 향하는 간선의 수
진입 차수 : 방향 그래프에서 외부에서 한 노드로 들어오는 간선의 수

 

 

📌 그래프 표현 방식 

 

1) 인접 행렬

 

 

무방향 그래프를 기준으로 1과 3인 정점이 연결되어있다면, graph[1][3] = graph[3][1] = 1 로 표현할 수 있다. 

 

2) 인접 리스트 

 

 

인접행렬과 비교했을 때, 정점이 많고 간선이 상대적으로 적은 상태에서 공간을 절약할 수 있는 방법이다. 

인접행렬은 V개의 정점에 대해 O(V²)의 공간이 필요하고, 인접리스트는 E개의 간선이 더해져 O(V+E)의 공간이 필요하다. 

 

  인접행렬 인접리스트
공간 복잡도 O(V²) O(V+E)
정점 u,v 연결 여부 확인 시간 복잡도 O(1) O(min(degree(u), degree(v))
정점 v와 연결된 모든 정점 확인 시간 복잡도 O(v) O(degree(v))
효율적인 상황 두 점의 연결 여부를 자주 확인하거나,
E가 V²에 가까울 때
특정 정점에 연결된 모든 정점을 자주 확인할 때나, 
E가 V²보다 훨씬 작을 때 

출처 : 바킹독님의 블로그 

 

2. 그래프의 탐색 

이미지 출처 : 코딩 팩토리님 블로그 (https://coding-factory.tistory.com/610)

 

📌 깊이 우선 탐색 DFS

갈 수 있는 만큼 최대 깊이로 들어가고, 더 이상 길이 없다면 이전 정점으로 돌아가는 방식으로 순회하는 방법.

재귀방식 혹은 스택을 이용해 구현한다. 

 

📌 너비 우선 탐색 BFS

시작 정점에서 인접한 정점들을 우선으로 방문하고, 방문했던 정점에 대해 다시 인접한 정점들을 방문하며 순회하는 방식. 

시작정점에 가까운 정점일 수록 먼저 방문하는 것이 특징이다. 보통 큐를 이용하여 구현할 수 있다.