[Java] Graph

최우형·2023년 3월 18일
1

Java

목록 보기
23/24

📌Graph

여러 개의 점들이 서로 복잡하게 연결되어 있는 관계를 표현한 자료구조이다.


Graph의 구조

  • 직접적인 관계가 있는 경우 두 점 사이를 이어주는 선이 있다.

  • 간접적인 관계라면 몇 개의 점과 선에 걸쳐 이어진다.

  • 하나의 점을 그래프에서는 정점(vertex)이라고 표현하고, 하나의 선은 간선(edge)라고 한다.


예시

서울에 사는 A는 부산에 사는 B와 오랜 친구 사이이다. 이번 주말에 부산에서 열리는 B의 결혼식에 참석하기 위해 A는 차를 몰고 부산으로 가려고 한다. 대전에 살고 있는 친구 C도 B의 결혼식에 참석한다고 하여, A는 서울에서 출발하여 대전에서 C를 태워 부산으로 이동하려고 한다.

  • 정점 : 서울, 대전, 부산
  • 간선 : 서울 - 대전, 대전 - 부산, 부산 - 서울

서울, 대전, 부산 사이에 간선이 존재하는데, 이 간선은 내비게이션으로 이동 가능을 나타낸다.
만약 일본을 추가한다면 자동차로 한국에서 일본으로 이동할 수 없기 때문에 관계가 없다라고 표현한다.

두 도시가 이어져있다는 사실만 알려줄 뿐, 거리와 같은 그 외의 정보는 포함하지 않는다. 이렇게 추가적인 정보를 파악할 수 없는 그래프, 가중치(연결의 강도가 얼마나 되는지)가 적혀있지 않은 이런 그래프를 비가중치 그래프라고 한다.

/*
	1 == 서울, 2 == 부산, 3 == 대전
	0은 연결되지 않은 상태, 1은 연결된 상태 (간선을 정수로 표현)
    각자 자리수가 [서울, 부산, 대전]이다.
*/

[1] = [0, 1, 1] // 서울 - 서울(0) , 서울 - 부산(1) , 서울 - 대전(1)
[2] = [1, 0, 1] // 부산 - 서울(1) , 부산 - 부산(0),  부산 - 대전(1)
[3] = [1, 1, 0] // 대전 - 서울(1) , 대전 - 부산(1) , 대전 - 대전(0)

📌용어 정리

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

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

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

  • 가중치 그래프 (weighted Graph) : 연결의 강도(추가적인 정보)가 얼마나 되는지 적혀져 있는 그래프를 뜻한다.

  • 비가중치 그래프 (unweighted Graph) : 연결의 강도가 적혀져 있지 않은 그래프를 뜻한다.

  • 무(방)향 그래프 (undirected graph) : 앞 예제에서 내비게이션은 무(방)향 그래프이다. 서울 -부산, 부산 -서울은 가능하다. 하지만 단방향(direct) 그래프로 구현된다면 서울-부산은 가능하지만 부산-서울은 불가능하다. 만약 두 지점이 일방통행도로로 이어져 있다면 단뱡향인 간선으로 표현할 수 있다.

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

  • 인접 (adjacency) : 두 정점 간에 간선이 직접 이어져 있다면 이 두 정점은 인접한 정점이다.

  • 자기 루프 (self loop) : 정점에서 진출하는 간선이 곧바로 자기 자신에게 진입하는 경우 자기 루프를 가졌다라고 표현한다. 다른 정점을 거치지 않는 것이 특징이다.

  • 사이클 (cycle) : 한 정점에서 출발하여 다시 해당 정점으로 돌아갈 수 있다면 사이클이 있다라고 표현한다
    ex) 서울 -> 대전 -> 부산 -> 서울

profile
프로젝트, 오류, CS 공부, 코테 등을 꾸준히 기록하는 저만의 기술 블로그입니다!

0개의 댓글