[자료구조] NonLinear Data - Graph [Part1. 개요 (구성 요소 & 분류)]

Kyung Jae, Cheong·2024년 10월 15일
0

자료구조-DataStructure

목록 보기
10/19
post-thumbnail

본 시리즈는 프로그래밍 자료구조의 개념을 정리하고 실습을 진행해보는 시리즈입니다.

  • 실습은 다음과 같은 개발환경 및 버전에서 진행하였습니다.
    • IDE : IntelliJ IDEA (Ultimate Edition)
    • Java : JDK 21 (corretto-21)
    • Python : 3.9 (conda env)

비선형 자료구조 - Graph (Part 1)

1. Graph란?

그래프(Graph)정점(Vertex)간선(Edge)으로 이루어진 비선형 자료구조입니다.

  • 그래프는 다양한 데이터 관계를 모델링하는 데 사용되며, 현실 세계의 복잡한 상호작용을 표현하기에 매우 유용합니다.
  • 다른 자료구조와 달리 비계층적이며, 정점 간의 다양한 연결을 표현할 수 있습니다.

1.1 그래프의 기본 구성 요소

  • 정점(Vertex): 데이터를 저장하는 기본 단위입니다.
    • 보통 하나의 객체나 데이터를 나타내며, 이를 노드(Node)라고도 부릅니다.
  • 간선(Edge): 두 정점 간의 관계를 나타내는 연결선입니다.
    • 간선은 두 정점을 연결하며, 이때 간선에는 방향이 있을 수도 있고, 없을 수도 있습니다.
  • 가중치(Weight): 그래프에서 각 간선은 가중치를 가질 수 있습니다.
    • 가중치는 간선을 통해 이동하는 비용이나 거리 등을 나타내며, 이를 통해 최단 경로최소 비용 문제 등을 해결할 수 있습니다.

구성 요소에 대한 자세한 내용은 밑에서 다시 자세히 다룰 예정입니다 !

1.2 그래프의 주요 특징

  • 비선형 자료구조: 그래프는 정점들이 서로 다양한 방식으로 연결될 수 있어, 단순히 순서가 있는 선형 자료구조와는 다릅니다.
  • 유연한 구조: 정점이 어떻게 연결되든 다양한 형태를 가질 수 있으며, 현실 세계의 복잡한 상호작용을 효과적으로 모델링할 수 있습니다.
  • 노드 간 관계 표현: 각 정점 간의 복잡한 관계를 표현하기 때문에, 트리 같은 자료구조보다 더욱 일반화된 데이터 모델입니다.
    • 트리는 그래프의 일종으로 계층을 가진 비선형 자료구조입니다. 다음 포스팅에서 다룰 예정입니다.

1.3 그래프의 주요 용도

그래프는 실생활의 여러 복잡한 시스템을 모델링할 때 사용됩니다. 예를 들어:

  • 컴퓨터 네트워크: 컴퓨터(정점)들이 네트워크 연결(간선)을 통해 통신하는 방식.
  • 소셜 네트워크: 사용자(정점)들이 친구나 팔로우 관계(간선)로 연결된 구조.
  • 지도 및 길찾기: 장소(정점)들이 도로(간선)로 연결된 구조로, 이를 통해 최단 경로나 최소 비용 경로를 찾습니다.
  • 웹페이지 링크 구조: 웹 페이지(정점)들이 하이퍼링크(간선)로 연결된 구조로, 검색 엔진에서 페이지의 중요도를 계산할 때 사용됩니다.

1.4 그래프의 실생활 예시

  • 도로망: 도시나 교차로를 정점으로, 그 사이의 도로를 간선으로 표현한 지도.
  • 항공편 경로: 공항을 정점으로 하고, 항공편을 간선으로 표현한 경로.
  • 전력망 네트워크: 발전소나 전력소비처(정점)들이 전력선(간선)으로 연결된 구조.
  • 추천 시스템: 사용자와 아이템을 정점으로, 구매하거나 선호하는 관계를 간선으로 표현한 추천 알고리즘의 기본 구조.

이처럼, 그래프는 현실 세계의 여러 복잡한 시스템을 데이터로 모델링하고 분석하는 데 유용합니다.

2. 그래프의 구성 요소 및 관련 용어

그래프는 현실 세계의 복잡한 관계를 모델링하는 데 매우 유용한 자료구조로, 기본적으로 정점(Vertex)간선(Edge)으로 이루어져 있습니다.

이 섹션에서는 그래프의 구성 요소와 함께, 관련 용어들을 자세히 설명합니다.

2.1 정점(Vertex)

정점(Vertex)은 그래프의 기본 단위로, 데이터를 저장하는 역할을 합니다.

  • 정점은 주로 Node(노드)라고도 불리며, 그래프에서 중요한 데이터가 저장되는 곳입니다.
  • 정점들은 서로 간선으로 연결되어 있을 수도 있고, 연결되어 있지 않을 수도 있습니다.

예시:

  • 소셜 네트워크에서는 각 사람이 정점으로 표현되며, 사람들 간의 관계가 간선으로 표현됩니다.
  • 지도(Graph)에서는 각 도시교차로가 정점에 해당합니다.

간선(Edge)은 두 정점을 연결하는 선으로, 두 정점 간의 관계연결을 나타냅니다. (Link, Branch, 등의 용어로도 불립니다)

  • 간선에는 방향이 있을 수도 있고, 없을 수도 있습니다.
  • 간선은 정점 간의 직접적인 경로를 나타내며, 그래프 구조에서 정점들의 연결성을 정의합니다.

간선의 유형:

  • 유향 간선(Directed Edge): 간선이 한 방향으로만 연결되어 있는 경우, A에서 B로의 경로는 존재하지만 B에서 A로의 경로는 존재하지 않는 경우를 말합니다. (A -> B)
  • 무향 간선(Undirected Edge): 양방향 연결을 의미하며, A에서 B로의 경로와 B에서 A로의 경로가 동일하게 존재합니다. (A <-> B 혹은 A - B)

예시:

  • 항공편 경로에서 출발지와 도착지 간의 비행 경로는 유향 간선입니다.
  • 도로망에서 쌍방향 도로는 무향 간선입니다.

2.3 가중치(Weight)

가중치(Weight)는 간선에 부여된 값으로, 거리, 비용, 시간 등의 개념을 표현할 때 사용됩니다.

  • 가중치 그래프(Weighted Graph)는 각 간선에 가중치가 할당된 그래프입니다.
  • 비가중치 그래프(Unweighted Graph)는 간선이 단순한 연결을 나타내며, 가중치가 없는 그래프입니다.

예시:

  • 도로망에서 도로 간 거리를 나타내기 위해 간선에 거리 정보를 가중치로 할당할 수 있습니다.
  • 네트워크 그래프에서 데이터 전송 비용을 나타내기 위해 간선에 전송 비용을 가중치로 사용할 수 있습니다.

2.4 차수(Degree)

차수(Degree)는 한 정점에 연결된 간선의 개수를 의미합니다.

  • 무향 그래프에서는 하나의 정점에 연결된 간선의 개수차수(Degree)라고 합니다.
  • 유향 그래프에서는 진입 차수(In-degree)진출 차수(Out-degree)로 구분됩니다.
    • 진입 차수(In-degree): 외부에서 해당 정점으로 들어오는 간선의 수.
    • 진출 차수(Out-degree): 해당 정점에서 외부로 나가는 간선의 수.

예시:

  • SNS에서 한 사용자가 팔로워와 팔로잉 관계를 맺는 경우, 진입 차수는 그 사용자를 팔로우하는 사람의 수를 나타내며, 진출 차수는 그 사용자가 팔로우하는 사람의 수를 나타냅니다.

2.5 경로(Path)

경로(Path)는 한 정점에서 시작하여 다른 정점으로 이동할 때 지나가는 정점들의 순서 또는 리스트입니다.

  • 경로는 단순 경로(Simple Path)사이클(Cycle)로 나뉩니다.
    • 단순 경로(Simple Path): 동일한 정점을 두 번 이상 지나지 않는 경로.
    • 사이클(Cycle): 시작한 정점으로 다시 돌아오는 경로.
  • 또한 이러한 경로의 길이를 경로 길이(Path Length)라고 합니다.
    • 그래서 최단경로(shortest path)는 가능한 모든 경로(Path)중 가장 짧은 경로 길이(Path Length)를 가지는 경로(Path)를 의미하게 됩니다.

예시:

  • 도로망에서 한 도시에서 다른 도시로 이동하는 경로는 단순 경로일 수 있으며, 원래 도시로 돌아오는 경로는 사이클입니다.

2.6 연결성(Connectivity)

그래프에서 연결성(Connectivity)은 정점 간의 연결 여부를 나타냅니다.

  • 연결 그래프(Connected Graph): 그래프 내의 모든 정점들이 직간접적으로 연결되어 있는 경우.
  • 비연결 그래프(Disconnected Graph): 일부 정점들이 서로 연결되어 있지 않은 그래프.

예시:

인터넷 네트워크에서 모든 컴퓨터가 하나의 네트워크로 연결되어 있다면 연결 그래프이며, 네트워크에 연결되지 않은 컴퓨터가 있다면 비연결 그래프입니다.

2.7 인접(Adjacency)

인접(Adjacency)는 두 정점이 간선으로 직접 연결되어 있는지 여부를 나타냅니다.

  • 인접 정점(Adjacenct Vertex): 간선으로 직접 연결된 두 정점을 인접 정점이라 부릅니다.

예시:

  • 그래프 탐색에서는 현재 정점과 인접한 정점을 탐색 대상으로 삼습니다.

3. 그래프의 종류

그래프는 구조속성에 따라 여러 가지로 분류될 수 있습니다. 이 섹션에서는 그래프의 다양한 종류를 정리합니다.

3.1 방향성에 따른 분류

유향 그래프 (Directed Graph, Digraph)

유향 그래프는 간선에 방향이 있는 그래프입니다. (방향 그래프라고도 부릅니다)

  • 각 간선은 특정한 방향으로 연결되며, 한 정점에서 다른 정점으로 한 방향으로만 이동할 수 있습니다.
    • 물론 일부 간선은 양방향으로 서로 연결될 순 있습니다. (다만 모든 간선이 양방향이면 유향 그래프로 분류하지 않습니다.)
  • 예시: 소셜 네트워크에서 팔로우 관계 (A가 B를 팔로우한다고 해서 B가 A를 자동으로 팔로우하지 않음).
  • 표기: 간선을 (A -> B)로 표시하거나 <A,B>로 표시하기도 합니다.

무향 그래프 (Undirected Graph)

무향 그래프는 간선에 방향이 없는 그래프입니다.

  • 정점 간의 관계는 모두 양방향이며, 쌍방향 연결을 의미합니다.
    • 즉, A와 B가 서로 연결되어 있으면, 양쪽 방향 모두로 이동할 수 있습니다.
  • 예시: 도로망에서 쌍방향 도로 (A에서 B로 가는 길이 있으면, B에서 A로 가는 길도 존재).
  • 표기: 간선을 (A - B)로 표시하거나 (A,B)로 표시하기도 합니다.

3.2 가중치 여부에 따른 분류

가중치 그래프 (Weighted Graph)

가중치 그래프는 각 간선에 가중치가 할당된 그래프입니다.

  • 간선의 가중치는 거리, 비용, 시간 등을 나타내며, 최단 경로 문제최소 비용 문제를 해결할 때 주로 사용됩니다.
  • 예시: 도로망에서 거리나 교통량을 가중치로 사용하는 그래프.
  • 표기: 간선에 가중치를 적어서 표시합니다.
    • 예를 들어 (A - B, 3)AB 사이의 간선이 가중치 3을 가짐을 의미합니다.

비가중치 그래프 (Unweighted Graph)

비가중치 그래프는 간선에 가중치가 없는 그래프입니다.

  • 간선이 단순히 연결 여부만을 나타내며, 각 연결의 중요도가 동일합니다.
  • 예시: 소셜 네트워크에서 친구 관계는 간선에 가중치가 없는 경우가 많습니다.

3.3 연결 상태에 따른 분류

연결 그래프 (Connected Graph)

연결 그래프는 모든 정점이 서로 연결되어 있는 그래프입니다.

  • 그래프 내의 어느 한 정점에서 다른 모든 정점으로 경로가 존재하는 경우를 말합니다.
  • 예시: 완전한 컴퓨터 네트워크에서는 모든 컴퓨터가 연결되어 있어야 합니다.

비연결 그래프 (Disconnected Graph)

비연결 그래프는 일부 정점이 서로 연결되지 않은 그래프입니다.

  • 일부 정점 간에는 경로가 존재하지 않으며, 여러 개의 독립된 하위 그래프들로 구성될 수 있습니다.
  • 예시: 네트워크가 나뉘어 있는 경우.

3.4 순환 여부에 따른 분류

사이클 그래프 (Cyclic Graph)

사이클 그래프는 사이클(순환)이 존재하는 그래프입니다.

  • 즉, 한 정점에서 시작해 여러 정점을 지나 다시 원래 정점으로 돌아오는 경로가 존재합니다.
  • 예시: 도로망에서 다시 출발지로 돌아오는 경로가 존재하는 경우.

비순환 그래프 (Acyclic Graph)

비순환 그래프는 사이클이 없는 그래프입니다.

  • 정점들 간에 순환 경로가 존재하지 않으며, 유향 비순환 그래프(DAG)정렬 문제나 작업 스케줄링 문제에서 자주 사용됩니다.
  • 예시: 프로젝트의 작업 순서를 정하는 그래프.

3.5 상대적인 밀도에 따른 분류

희소 그래프 (Sparse Graph)

희소 그래프는 간선의 개수가 적은 그래프입니다.

  • 정점에 비해 간선의 수가 상대적으로 적은 경우, 즉 m << n(n-1)/2인 경우입니다.
  • 예시: 대규모 네트워크에서 일부 컴퓨터들만 연결된 상태.

밀집 그래프 (Dense Graph)

밀집 그래프는 간선의 개수가 많은 그래프입니다.

  • 거의 모든 정점이 서로 연결되어 있는 그래프, 즉 m ≈ n(n-1)/2인 경우입니다.
  • 예시: 모든 사용자들이 서로 연결된 소셜 네트워크.

3.6 특수한 형태의 그래프

완전 그래프 (Complete Graph)

완전 그래프는 모든 정점이 서로 연결된 그래프입니다.

  • n개의 정점이 있으면, 각 정점은 n-1개의 다른 정점과 연결됩니다.
    • 완전 그래프에서 간선의 개수는 n(n-1)/2입니다.
  • 예시: 모든 도시가 도로로 직접 연결된 교통망.

이분 그래프 (Bipartite Graph)

이분 그래프는 두 개의 정점 집합으로 나눌 수 있으며, 한 집합의 정점은 다른 집합의 정점과만 연결되는 그래프입니다.

  • 즉, 같은 집합 내의 정점들끼리는 연결되지 않고, 두 집합 간의 정점들만 간선으로 연결됩니다.
  • 예시:
    • 구직자와 회사 간의 매칭 시스템 (구직자는 여러 회사에 지원하고, 회사는 여러 구직자를 채용할 수 있음).
    • 이진 매칭 문제헝가리안 알고리즘, 등

마무리

이번 포스팅에서는 그래프의 기본 개념그래프를 구성하는 요소들, 그리고 그래프의 다양한 분류에 대해 다뤘습니다.

  • 정점(Vertex)간선(Edge)을 중심으로 그래프가 어떻게 현실의 복잡한 관계를 모델링할 수 있는지 이해하는 것이 중요한 첫걸음입니다.
  • 그래프는 소셜 네트워크, 컴퓨터 네트워크, 지도, 추천 시스템 등 다양한 실생활 응용에서 사용되는 매우 강력한 자료구조입니다.

다음 포스팅에서는 프로그래밍 언어에서의 그래프 표현 방법구현 방법에 대해 더 깊이 다루고, 그래프를 활용하는 알고리즘 예시들을 간단하게 소개하는 시간을 가져보려합니다. (알고리즘의 구체적인 내용들은 알고리즘 파트에서 따로 다룹니다)

profile
일 때문에 포스팅은 잠시 쉬어요 ㅠ 바쁘다 바빠 모두들 화이팅! // Machine Learning (AI) Engineer & BackEnd Engineer (Entry)

0개의 댓글