개발 일지/CS

[자료구조] 그래프(Graph)

미숫가루설탕많이 2023. 1. 17. 11:33

 그래프(graph)는 여러 개의 점들이 서로 복잡하게 연결되어 있는 그래프이다.

 

그래프

 

 그래프는 연결할 객체를 의미하는 정점(vertext)과 객체를 연결하는 간선(edge)의 집합으로 구성되어 있다.

 

 두 정점을 이어주는 선이 있으면 직접적인 관계이고 몇 개의 점과 선에 걸쳐서 이어진다면 간접적인 관계이다.

 

 이어진 선에 화살표 방향이 없으면 무방향 간선, 하나의 방향이 있으면 단방향 간선, 양쪽 모두 방향이 있으면 양방향 간선이라고 한다.

 

 실사용 예시로는 포털 사이트의 검색 엔진, 네비게이션(길 찾기) 등이 있다.

 

 

 

 

표현 방식

 

  • 인접 행렬
    : 두 정점을 바로 이어주는 간선이 있다면 두 정점은 인접하다고 말하며, 가장 빠른 경로를 찾고자 할 때 주로 사용한다.

  • 인접 리스트
    : 각 정점이 어떤 정점과 인접하는지를 리스트의 형태로 표현하며, 메모리를 효율적으로 사용하고 싶을 때 인접 리스트를 사용한다.

 

 

 

 

그래프 용어

 

  • 정점(vertex)
    : 노드(node)라고도 하며 데이터가 저장되는 그래프의 기본 원소이다.

  • 간선(edge)
    : 정점을 이어주는 선으로 정점 간의 관계를 나타낸다.

  • 인접 정점(adjacent vertex)
    : 하나의 정점에서 간선에 의해 직접 연결되어 있는 정점을 말한다.

  • 가중치 그래프(weighted graph)
    : 연결의 강도가 적혀 있는 그래프를 말한다.

  • 비가중치 그래프(unweighted graph)
    : 연결의 강도가 적혀져 있지 않는 그래프를 말한다.
  • 경로(path)
    : 한 정점에서 다른 정점까지 간선으로 연결된 정점을 순서대로 나열한 리스트를 말한다.

  • 단순 경로(simple path)
    : 모두 다른 정점으로 구성되어 있는 경로를 말한다.

  • 경로 길이(path length)
    : 경로를 구성하는 간선의 수를 말한다.

  • 진입차수(in-degree) / 진출차수(out-degree)
    : 한 정점에 들어오는 간선 / 나가는 간선이 몇 개인지 나타낸다.

  • 인접(adjacency)
    : 두 정점이 간선에 의해 직접 연결되어 있으면 두 정점은 인접한 정점을 말한다.

  • 자기 루프(self loop)
    : 정점에서 진출하는 간선이 다른 정점을 거치지 않고 자기 자신에게 바로 진입하는 것을 말한다.

  • 사이클(cycle)
    : 한 정점에서 출발하여 다시 해당 정점으로 돌아갈 수 있으면 사이클이 있다고 표현한다.