그라프
그라프 (Graph)는 수학, 컴퓨터 과학 및 네트워크 과학에서 객체 간의 관계를 모델링하는 데 사용되는 추상적인 개념입니다. 그라프는 정점(vertex) 또는 노드(node)라고 불리는 객체의 집합과, 이 정점들을 연결하는 변(edge)의 집합으로 구성됩니다.
기본 구성 요소:
- 정점 (Vertex/Node): 객체를 나타냅니다. 예시: 사람, 도시, 웹페이지 등.
- 변 (Edge): 정점 간의 관계를 나타냅니다. 예시: 친구 관계, 도로 연결, 하이퍼링크 등. 변은 방향성을 가질 수도 있고 (directed graph), 그렇지 않을 수도 있습니다 (undirected graph). 방향성을 가진 변은 호 (arc)라고도 불립니다.
그래프의 종류:
- 무방향 그래프 (Undirected Graph): 변에 방향이 없는 그래프. A와 B를 연결하는 변은 A→B와 B→A를 모두 의미합니다.
- 방향 그래프 (Directed Graph): 변에 방향이 있는 그래프. A→B는 A에서 B로의 연결만 의미하며, B→A는 별도의 변으로 존재할 수 있습니다.
- 가중 그래프 (Weighted Graph): 변에 가중치(비용, 거리 등)가 부여된 그래프. 가중치는 변의 중요도나 관계의 강도를 나타낼 수 있습니다.
- 부분 그래프 (Subgraph): 원래 그래프의 정점과 변의 부분집합으로 이루어진 그래프.
- 연결 그래프 (Connected Graph): 그래프 내의 모든 정점 쌍 사이에 경로가 존재하는 그래프.
- 트리 (Tree): 사이클이 없는 연결 그래프.
- 완전 그래프 (Complete Graph): 그래프 내의 모든 정점 쌍이 변으로 연결된 그래프.
그래프의 표현:
- 인접 행렬 (Adjacency Matrix): 정점의 개수를 n이라고 할 때, n x n 크기의 행렬로 그래프의 연결 관계를 표현합니다. 행렬의 (i, j) 요소는 정점 i에서 정점 j로의 변의 존재 여부 (또는 가중치)를 나타냅니다.
- 인접 리스트 (Adjacency List): 각 정점에 대해, 그 정점과 연결된 다른 정점들의 리스트를 저장합니다.
그래프의 활용:
그래프는 다양한 분야에서 활용됩니다.
- 소셜 네트워크 분석: 사람 간의 관계 분석, 친구 추천 등.
- 웹 검색 엔진: 웹 페이지 간의 링크 구조 분석.
- 교통 및 물류: 최적 경로 탐색, 물류 네트워크 설계.
- 컴퓨터 네트워크: 네트워크 토폴로지 설계 및 관리.
- 생물 정보학: 단백질 상호작용 네트워크 분석.
- 인공지능: 지식 표현 및 추론, 게임 인공지능.
그래프 알고리즘:
그래프를 다루는 다양한 알고리즘이 존재합니다.
- 탐색 알고리즘: 깊이 우선 탐색 (DFS), 너비 우선 탐색 (BFS)
- 최단 경로 알고리즘: 다익스트라 알고리즘, 벨만-포드 알고리즘, 플로이드-워셜 알고리즘
- 최소 신장 트리 알고리즘: 프림 알고리즘, 크루스칼 알고리즘
- 위상 정렬 알고리즘: 방향 그래프에서 정점들의 선행 순서를 찾는 알고리즘
그래프 이론은 현대 과학과 기술의 많은 분야에서 필수적인 도구로 사용되고 있으며, 그 중요성은 계속해서 증가하고 있습니다.