컴퓨터공학

그래프(Graph) 자료구조와 최단 경로 알고리즘 (다익스트라, 플로이드 워셜)

nyambu 2025. 3. 16. 18:30

그래프(Graph) 자료구조와 최단 경로 알고리즘
그래프(Graph) 자료구조와 최단 경로 알고리즘

1. 그래프(Graph) 자료구조란?

 그래프(Graph)는 정점(Vertex)과 간선(Edge)으로 구성된 자료구조로, 객체들 간의 관계를 표현하는 데 사용된다.

 

  • 정점(Vertex, 노드): 데이터를 저장하는 개체 (예: 도시, 사람, 컴퓨터)
  • 간선(Edge): 정점 간의 연결 관계를 나타내는 요소 (예: 도로, 네트워크 링크)

그래프는 소셜 네트워크 분석, 지도 네비게이션, 네트워크 라우팅, 인공지능(AI) 경로 탐색 등 다양한 분야에서 활용된다.


2. 그래프의 종류

2-1. 방향 그래프 vs 무방향 그래프

  • 무방향 그래프(Undirected Graph): 간선의 방향이 없으며, 양방향으로 이동 가능
    예) A—B (A에서 B로 갈 수도 있고, B에서 A로도 갈 수 있음)
  • 방향 그래프(Directed Graph, DAG): 간선이 특정 방향을 가지며, 단방향 이동만 가능
    예) A → B (A에서 B로 이동 가능하지만, B에서 A로 이동 불가능)

 

2-2. 가중치 그래프(Weighted Graph)

  • 가중치 그래프(Weighted Graph): 간선에 가중치(비용, 거리 등)가 부여된 그래프
    예) 도로 네트워크에서 거리(km), 데이터 전송 속도(ms) 등

가중치가 없는 그래프(Unweighted Graph)**도 존재하며, 모든 간선의 비용이 동일한 경우를 의미함

 

2-3. 연결 그래프 vs 비연결 그래프

  • 연결 그래프(Connected Graph): 모든 정점이 적어도 하나의 간선으로 연결되어 있음
  • 비연결 그래프(Disconnected Graph): 일부 정점이 다른 정점과 연결되지 않음

 

2-4. 사이클 그래프 vs 비순환 그래프(트리)

  • 사이클 그래프(Cyclic Graph): 같은 정점을 다시 방문할 수 있는 경로(사이클)가 존재
  • 비순환 그래프(Acyclic Graph): 사이클이 없는 그래프 (예: 트리(Tree))

3. 그래프의 표현 방식

 그래프는 인접 행렬(Adjacency Matrix) 또는 인접 리스트(Adjacency List) 방식으로 표현된다.

 

인접 행렬(Adjacency Matrix)

  • 2차원 배열을 이용하여 정점 간 연결 정보를 저장
  • 간선이 많을 경우 빠른 접근 가능 (O(1))
  • 하지만 공간 복잡도 O(V²)로 메모리 낭비가 심함

📌 예제 (3개의 정점 A, B, C가 연결된 경우)

   A  B  C
A [0, 1, 1]
B [1, 0, 1]
C [1, 1, 0]

 

인접 리스트(Adjacency List)

  • 배열 + 연결 리스트를 이용하여 정점 간 연결 정보를 저장
  • 간선이 적은 그래프(Sparse Graph)에 적합 (O(V + E))
  • 공간 절약 가능하지만 특정 간선 탐색 속도는 O(V)로 다소 느림

📌 예제

A → B, C
B → A, C
C → A, B

4. 최단 경로 알고리즘

 그래프에서 최단 경로를 찾는 대표적인 알고리즘은 **다익스트라 알고리즘(Dijkstra)**과 **플로이드 워셜 알고리즘(Floyd-Warshall)**이다.

4-1. 다익스트라 알고리즘 (Dijkstra’s Algorithm)

 다익스트라 알고리즘은 한 정점에서 다른 모든 정점까지의 최단 경로를 찾는 알고리즘이다. 음수 가중치를 가지는 그래프에서는 사용할 수 없음.

 

📌 알고리즘 원리

  • 출발 노드를 설정하고, 초기 거리를 **무한대(∞)**로 설정
  • 시작 노드의 거리를 0으로 설정하고, 방문하지 않은 정점 중 최단 거리 정점을 선택
  • 해당 정점에서 연결된 인접 정점까지의 거리를 계산하여 업데이트
  • 위 과정을 반복하여 모든 정점에 대한 최단 거리를 찾음

📌 시간 복잡도

  • 우선순위 큐(Priority Queue, 힙) 사용 시 O(E log V)
  • 단순 리스트(배열) 사용 시 O(V²)

📌 예제

입력: A에서 모든 노드까지의 최단 거리 찾기
     (A) ---3--- (B)
      |         |
      1         7
      |         |
     (C) ---5--- (D)

출력:
A → B 최단 거리: 3
A → C 최단 거리: 1
A → D 최단 거리: 6 (C → D 경로 선택)

 

다익스트라 알고리즘은 내비게이션 시스템, 네트워크 라우팅에서 최적 경로를 찾는 데 활용된다.

 

4-2. 플로이드 워셜 알고리즘 (Floyd-Warshall Algorithm)

 플로이드 워셜 알고리즘은 모든 정점에서 모든 정점까지의 최단 경로를 찾는 알고리즘이다.

 

📌 알고리즘 원리

  • 그래프를 인접 행렬 형태로 표현
  • 모든 노드 쌍 (i, j)에 대해 최단 거리를 초기화
  • 중간 노드 k를 거쳐 i에서 j까지 가는 경로가 더 짧다면 업데이트
  • 모든 노드에 대해 위 과정을 반복하여 최단 경로를 찾음

 

📌 시간 복잡도

  • O(V³) (모든 노드 쌍을 고려하기 때문에 다익스트라보다 느림)

📌 예제

입력:
   (A) ---3--- (B)
    |          |
    1          7
    |          |
   (C) ---5--- (D)

출력:
A → B 최단 거리: 3
A → C 최단 거리: 1
A → D 최단 거리: 6
B → D 최단 거리: 5

 

플로이드 워셜 알고리즘은 모든 노드 간 경로를 계산해야 하는 교통 시스템, 네트워크 최적화 문제에서 유용하다.


5. 다익스트라 vs 플로이드 워셜 비교

알고리즘 목적 시간 복잡도 데이터 구조 장점 단점
다익스트라 한 정점 → 모든 정점 O(E log V) 우선순위 큐(힙) 사용 빠름, 메모리 효율적 음수 가중치 불가
플로이드 워셜 모든 정점 → 모든 정점 O(V³) 인접 행렬 사용 모든 경로 탐색 가능 느리고 메모리 사용 큼

출발지가 하나일 경우 다익스트라를, 모든 정점 간 경로가 필요하면 플로이드 워셜을 사용하면 된다.


6. 그래프 알고리즘의 실용적인 활용 사례

 그래프와 최단 경로 알고리즘은 다양한 실생활 문제를 해결하는 데 사용된다. 네트워크 최적화, 내비게이션, 추천 시스템, 소셜 네트워크 분석 등에서 활용되는 대표적인 사례를 살펴보자.

6-1. 네트워크 최적화 (인터넷 라우팅)

  • 인터넷 서비스 제공자(ISP)는 라우팅 프로토콜을 사용하여 최적의 데이터 전송 경로를 찾는다.
  • 다익스트라 알고리즘은 OSPF(Open Shortest Path First) 프로토콜에서 사용되어 네트워크 내 최단 경로를 계산하는 데 활용된다.
  • 플로이드 워셜 알고리즘은 네트워크 내 모든 노드 간 최단 경로를 미리 계산해 저장하는 경우 사용된다.

 

📌 예제
인터넷 사용자가 특정 웹사이트에 접속할 때, 네트워크 라우터는 다익스트라 알고리즘을 사용하여 가장 빠른 경로를 선택한다.

 

6-2. 내비게이션 시스템 (GPS)

✔ 네비게이션 소프트웨어(구글 지도, 카카오 내비)는 최단 경로 알고리즘을 사용하여 목적지까지 가장 빠른 길을 찾는다.
다익스트라 알고리즘은 차량 이동 시 도로 교통 상황을 반영하여 최적 경로를 실시간으로 업데이트하는 데 사용된다.
✔ *A 알고리즘(A-Star Algorithm)**과 함께 사용하면 더 효과적인 길찾기가 가능하다.

📌 예제
운전자가 A에서 B로 이동할 때, GPS는 다익스트라 알고리즘을 이용해 최단 경로를 제공하며, 실시간 교통 상황을 반영하여 경로를 업데이트한다.

 

6-3. 추천 시스템 (소셜 네트워크 분석)

페이스북, 인스타그램, 링크드인 같은 SNS는 그래프 알고리즘을 사용하여 친구 추천 기능을 제공한다.
✔ "친구의 친구" 개념을 활용한 추천에서는 BFS(너비 우선 탐색, Breadth-First Search) 알고리즘이 자주 사용된다.
✔ 그래프 기반 머신러닝을 통해 유사한 관심사를 가진 사람을 추천하는 데 활용된다.

 

📌 예제
링크드인에서 "당신이 아는 사람일 수도 있습니다" 기능은 그래프 탐색을 기반으로 작동하며, BFS를 활용해 2~3단계 이내의 연결된 사람을 추천한다.

 

6-4. 전력망 및 도로 네트워크 설계

전력망 설계에서는 최소 비용으로 모든 지역을 연결하는 최소 신장 트리(MST, Minimum Spanning Tree) 알고리즘이 사용된다.
도로 네트워크 설계에서는 다익스트라 알고리즘을 사용하여 차량 이동 거리를 최소화한다.
✔ 플로이드 워셜 알고리즘을 이용해 모든 노드 간 최단 경로를 미리 계산하고 유지보수 시 활용할 수 있다.

 

📌 예제
국내 도로 네트워크에서 신도시를 개발할 때 **최소 신장 트리 알고리즘(크루스칼, 프림)**을 사용해 도로 건설 비용을 최적화한다.

 

6-5. AI 및 게임 개발

✔ AI 기반 게임에서는 그래프 탐색 알고리즘이 캐릭터 이동 및 경로 탐색에 사용된다.
✔ *A 알고리즘**은 다익스트라 알고리즘을 개선한 방식으로, 게임에서 몬스터가 플레이어를 추적하는 데 활용된다.
✔ 네트워크 상에서 최적의 경로를 탐색하는 AI 에이전트는 그래프 기반 탐색 기법을 사용한다.

 

📌 예제
스타크래프트, 롤(LOL) 같은 전략 게임에서 AI가 유닛을 효율적으로 이동시키는 데 다익스트라, A* 알고리즘을 사용한다.

 

6-6. 물류 및 배송 최적화

배송 경로 최적화 문제에서는 그래프와 최단 경로 알고리즘이 필수적으로 사용된다.
다익스트라 알고리즘을 활용하면 가장 빠른 배송 경로를 찾아 연료 및 시간을 절약할 수 있다.
플로이드 워셜 알고리즘을 사용하여 모든 지역 간 배송 경로를 사전에 계산하여 활용할 수도 있다.

 

📌 예제
쿠팡, 아마존 같은 물류 기업은 다익스트라 기반 경로 탐색 알고리즘을 사용해 최적의 배송 경로를 실시간으로 업데이트한다.


7. 그래프 알고리즘의 한계와 개선 방법

 

7-1. 다익스트라 알고리즘의 한계

  • 음수 가중치 처리 불가 → 벨만-포드(Bellman-Ford) 알고리즘을 사용해야 함
  • 우선순위 큐 미사용 시 속도 저하 → 힙(Heap) 자료구조를 사용하여 개선 가능
  • 최대 O(E log V)의 시간 복잡도 → 플로이드 워셜보다는 빠르지만, 대규모 그래프에서는 성능 저하 가능

 

📌 개선 방법

  • A 알고리즘을 적용하면 휴리스틱(Heuristic)을 활용하여 탐색 속도를 향상 가능
  • 다이나믹 프로그래밍과 그래프 알고리즘 결합 시 메모리를 절약하고 효율적인 탐색 가능

 

7-2. 플로이드 워셜 알고리즘의 한계

  • O(V³)로 시간 복잡도가 높음 → 다익스트라보다 비효율적
  • 모든 노드 간의 경로를 계산해야 하므로 공간 복잡도도 높음
  • 음수 가중치를 포함한 그래프에서도 적용 가능하지만, 음수 사이클(negative cycle)이 있으면 사용할 수 없음

 

📌 개선 방법

  • 벨만-포드 알고리즘을 사용하여 음수 가중치도 처리 가능
  • 존슨(Johnson's Algorithm) 알고리즘을 적용하면 O(V² log V)로 성능 최적화 가능

 

7-3. 대규모 그래프에서의 최적화 방법

  • 희소 그래프(Sparse Graph, 간선이 적은 그래프)에서는 인접 리스트를 사용하여 메모리 절약
  • 대규모 데이터셋에서는 딥러닝 기반의 강화 학습과 그래프 신경망(Graph Neural Network, GNN)을 활용
  • 퀀텀 컴퓨팅을 활용한 그래프 탐색 기술도 연구 중

 

📌 실제 활용 사례
구글 딥마인드(DeepMind)에서 **그래프 신경망(GNN)**을 활용한 네트워크 경로 탐색 최적화 연구 진행 중.