그래프는 대표적인 비선형 자료구조이다. 선형자료구조와 다르게 데이터 요소들이 계층적으로 연결되어 있다.
그렇다면 비선형 자료구조란 무엇일까?
비선형 자료구조(Non-linear Data Structure)란 데이터를 일렬으로 구성하지 않고, 자료 순서나 관계가 복잡한 자료구조를 말한다.
비선형 자료구조는 자료를 계층적으로 구성한 자료구조로, 데이터가 일렬로 연결되는 선형 자료구조와 달리 분기점이나 사이클 등이 존재하여 비선형적인 구조를 가지고 있다.
비선형 자료구조는 선형 자료구조보다 복잡한 구조를 가지기 때문에 구현 및 관리가 어려울 수 있지만, 적절하게 활용하면 다양한 문제를 해결할 때 도움이 된다.
대표적인 비선형 자료구조로는 트리, 그래프, 맵, 해시테이블 등이 있다.
😀이번 포스팅에서는 대표적인 비선형 자료구조 중 그래프에 대해서 알아보자.
그래프는 여러 개의 노드(node)와 이들을 연결하는 간선(Edge)으로 이루어진 자료구조이다.
노드(node)는 정점(Vertex)으로 표현될 수 있다.
그래프의 정의에서 보았듯이, 그래프는 정점과 간선으로 이루어 져 있다.
정점은 그래프에서 가장 기본적인 구성 요소이며, 각 정점은 고유한 이름(identifier)을 가집니다.
간선은 정점과 정점을 연결하는 선으로, 두 개의 정점을 연결하는 데 사용됩니다.
😀예를들어 V라는 장소
에서 U라는 장소
로 무엇
(인도, 차도, 육교, 철도 등)을 통해 간다고 했을 때 V나 U와 같은 장소는 정점(or노드)이 되고, 무엇에 해당하는 수단이 간선이 된다.
정점으로 나가는 간선을 해당 정점의 outdegree라고 하며, 들어오는 간선을 해당 점점의 indegree라고 한다.
😀그래프는 여러가지 특징을 가질 수 있다. 다만 하나의 그래프가 모든 특징을 가지는 것이 아니라 특징을 가짐에 따라 그래프의 종류도 나뉘어 진다.
무방향성(Unidirectionality)
그래프의 간선은 방향성이 없을 수 있으며, 양쪽 방향으로 모두 이동할 수 있습니다.
이러한 그래프를 무방향 그래프(undirected graph)라고 부른다.
😀양쪽의 방향으로 이동할 수 있지만, 무방향 그래프라고 부른다. 무방향의 의미가 방향의 강제하는 일방통행이 없다는 의미라고 생각할 수 있다.
방향성(Directionality)
그래프의 간선은 방향성이 있을 수 있으며, 한쪽 방향으로만 이동할 수 있다.
이러한 그래프를 방향 그래프(directed graph) 또는 유향 그래프(digraph)라고 부른다.
가중치(Weight)
그래프의 간선에는 가중치(weight)를 부여할 수 있다.
가중치를 부여한 그래프를 가중치 그래프(weighted graph)라고 부르며, 보통은 거리, 비용, 우선순위 등을 나타내는 데 사용된다.
연결성(Connectivity)
그래프에서 노드와 노드 사이에 경로가 존재하면, 두 노드는 연결되었다고 말한다. 그래프가 연결되어 있는 경우 연결 그래프(connected graph)라고 부르며, 그렇지 않은 경우 비연결 그래프(disconnected graph)이다.
사이클(Cycle)
그래프에서 한 노드에서 시작하여 경로를 따라가면서 마침내 자기 자신으로 돌아오는 경로를 사이클(cycle)이라고 부른다. 사이클이 없는 그래프를 비순환 그래프(acyclic graph)라고 부르며, 사이클이 있는 그래프를 순환 그래프(cyclic graph)라고 부른다.
차수(Degree)
그래프에서 한 노드에 인접한 간선의 수를 차수(degree)라고 부른다. 무방향 그래프에서는 노드의 차수가 연결된 노드의 수와 같으며, 방향 그래프에서는 인접한 노드의 수와 나가는 노드의 수로 구분된다.
😀그래프의 종류는 그래프가 가지는 구조와 특징에 따라서 구분된다.
무방향 그래프(Undirected Graph)
방향 그래프(Directed Graph)
가중치 그래프(Weighted Graph)
이분 그래프(Bipartite Graph)
비순환 그래프(Acyclic Graph)
완전 그래프(Complete Graph)
부분 그래프(Subgraph)
연결 그래프(Connected Graph)
비연결 그래프(Disconnected Graph)
강결합 그래프(Strongly Connected Graph)
😀일반적으로 그래프를 사용하였을 때 장점과 단점이 존재한다. 이에 대해 알아보고 보완할 방법을 생각해보자
참고자료(출처)
깃허브io 괭이쟁이 포스팅 [자료구조 1] 그래프(Graph) 이해하기
Velog tomato2532 포스팅 [자료구조] 그래프
깃허브io 권희정 포스팅 [자료구조] 그래프(Graph)란
Velog zion9948 포스팅 자료구조 트리와 그래프에 대해..
티스토리 이진섭 포스팅 [자료구조] 그래프(Graph)의 개념 설명
Velog kasterra 포스팅 핵심 자료구조 - 그래프 : 정의 및 표현