Hyemi Lee

Hyemi Lee

주니어 개발자의 삽질과 기록

Data Structure, Graph

그래프의 개념

단순히 노드(N, node)와 그 노드를 연결하는 간선(E, edge)을 하나로 모아 놓은 자료 구조

  • 즉, 연결되어 있는 객체 간의 관계를 표현할 수 있는 자료 구조이다.
    • ex. 지도, 지하철 노선도의 최단경로, 전기 회로의 소자들, 선수 과목 등
  • 그래프느 여러 개의 고립된 부분 그래프로 구성될 수 있다.

그래프와 트리의 차이

graph tree

참고-오일러 경로(Eulerian tour)

  • 그래프에 존재하는 모든 간선(edge)을 한 번만 통과하면서 처음 정점(vertex)으로 되돌아 오는 경로를 말한다.
  • 그래프의 모든 정점에 연결된 간선의 개수가 짝수일 때만 오일러 경로가 존재한다.

그래프와 관련된 용어

  • 정점: 위치라는 개념(node라고도 부름)
  • 간선: 위치 간의 관계. 즉, 노드를 연결하는 선 (edge, link, branch)
  • 인접 정점 : 간선에 의해 직접 연결된 정점
  • 정점의 차수(degree) : 무방향 그래프에서 하나의 정점에 인접한 정점의 수
    • 무방햔 그래프에 존재하는 정점의 모든 차수의 합 = 그래프의 간선 수의 2배
  • 진입 차수 : 방향 그래프에서 외부에서 오는 간선의 수
  • 진출 차수 : 뱡향 그래프에서 외부로 향하는 간선의 수
    • 방향 그래프에 있는 정점의 진입 차수 또는 진출 차수의 합 = 방햔 그래프의 간선의 수(내차수 + 외차수)
  • 경로 길이 : 경로를 구성하는 데 사용된 간선의 수
  • 단순 경로 : 경로 중에서 반복되는 정점이 없는 경우
  • 사이클 : 단순 경로의 시작 정점과 종료 정점이 동일한 경우

그래프의 종류

무방향 그래프 vs 방향 그래프

  • 무방향 그래프
    • 무방향 그래프의 간선은 간선을 통해서 양 방향으로 갈 수 있다.
    • 정점 A,정점 B를 연결하는 간선은 (A,B)와 같이 정점의 쌍으로 표현한다.
      • (A,B) == (B,A)
    • ex. 양방향 통행 도로
  • 방향 그래프
    • 간선에 방향성이 존재하는 그래프
    • A->B 로만 갈 수 있는 간선은 <A,B>로 표시한다
      • <A,B> != <B,A>
    • ex. 일방 통행

가중치 그래프

  • 가중치 그래프
    • 간선에 비용이나 가중치가 할당된 그래프
    • 네트워크 라고도 한다.
      • ex. 도시-도시의연결, 도로의 길이, 통신망의 사용료 등

연결그래프 vs 비연결 그래프

  • 연결 그래프
    • 무방향 그래프에 있는 모든 정점쌍에 항상 경로가 존재하는 경우
    • ex. 트리 : 사이클을 가지지 않는 연결 그래프
  • 비연결 그래프
    • 무방향 그래프에서 특정 정점쌍 사이에 경로가 존재하지 않는 경우

사이클 vs 비순환 그래프

  • 사이클(Cycle)
    • 단순 경로의 시작 정점과 종료 정점이 동일한 경우
      • 단순 경로(Simple Path): 경로 중에서 반복되는 정점이 없는 경우
  • 비순환 그래프(Acyclic Graph) 사이클이 없는 그래프

완전 그래프

  • 완전 그래프(Complete Graph)
    • 그래프에 속해 있는 모든 정점이 서로 연결되어 있는 그래프
    • 무방향 완전 그래프
      • 정점 수: n이면 간선의 수: n * (n-1) / 2

그래프의 구현 2가지

1. 인접 리스트

2. 인접행렬


그래프의 탐색

1. 깊이 우선 탐색

2. 너비 우선 탐색


Reference

https://gmlwjd9405.github.io/2018/08/13/data-structure-graph.html

Share on

Twitter Facebook LinkedIn

You may also enjoy

Redis Stream

2021年04月28日

Stream Stream은 로그 데이터를 처리하게위해 5.0에서 새로 도입된 데이터 타입입니다. 대량의 데이터가 연속적으로 발생할때 처리하기 위해 등장했습니다. 기존 데이터를 수정하지 않고 오직 추가로 발생합니다. 이런 종류의 데이터를 stream or log데이터...

Study, Object, chapter2&3 presentation

2021年04月20日

chapter03. 역할, 책임, 협력 객체지향 설계란, 올바른 객체에게 올바른 책임을 할당하면서 낮은 결합도와 높은 응집도를 가진 구조를 창조하는 활동이다.

Spring, chatting 프로그램 만들기, Reactive란?

2020年06月16日

Reactive 막힘없이 흘러다니는 data(event)를 통해 사용자에게 자연스러운 응답을 주고 규모 탄력적으로 리소스를 사용하며 실패에 있어서 유연하게 대처한다 모든 지점에서 블럭 되지 않게 하자 oop와 같은 패러다임 모든 것을 비동기적인 data의 strea...