[자료구조] 그래프이란?

유진·2023년 8월 22일

알고리즘-자료구조

목록 보기
5/15

📝 그래프의 정의

연결되어있는 객체간의 관계를 표현한 자료구조이다.



❗ 관련 용어

정점 (vertex) : 노드(node), 데이터가 저장되는 위치
간선 (edge) : 링크(link), 정점 간의 관계, 노드를 연결하는 선
인접 정점 (adjacent vertex) : 간선에 의해 직접 연결된 정점
정점의 차수 (degree) : 무방향 그래프에서 하나의 정점에 인접한 정점의 수
진입 차수 (in-degree) : 방향 그래프에서 외부에서 오는 간선의 수 (내차수)
진출 차수 (out-degree) : 방향 그래프에서 외부로 향하는 간선의 수 (외차수)
경로 길이(path length) : 경로를 구성하는 간선의 수
단순 경로(simple path) : 경로 중에서 반복되는 정점이 없는 경우
사이클(cycle) : 단순 경로의 시작 정점과 종료 정점이 동일한 경우



🎯 그래프의 특징

  • 트리도 그래프의 한 종류, 사이클이 허용되지 않는 그래프를 말한다.
  • 그래프는 네트워크 모델이다.
  • 노드들 사이에 무방향/방향에서 양방향 경로를 가질 수 있다.
  • self-loop 뿐만 아니라 loop/circuit 모두 가능하다.
  • 루트 노드라는 개념이 없다.
  • 부모-자식 관계라는 개념이 없다.
  • 순회는 DFS나 BFS로 이루어진다.
  • 그래프는 순환(Cyclic) 혹은 비순환(Acyclic)이다.
  • 그래프는 크게 방향 그래프와 무방향 그래프가 있다.
  • 간선의 유무는 그래프에 따라 다르다.


그래프 표현방법

1) 인접행렬

<출처> programiz

  • 무방향 그래프를 구현하면 정점들을 배열의 인덱스로 표현한다.
  • 주 정점이 연결되면 1, 연결되지 않으면 0으로 표현하고 자기 자신으로 연결되는 loop가 없으므로 배열의 대각선은 모두 0이 된다.
  • 방향 그래프를 구현하면 정점들을 배열의 인덱스로 표현하고 해당 정점에서 다른 정점으로 가는 간선이 있다며 1로 없다면 0으로 표현한다.

2) 인접리스트

<출처> programiz

  • 무방향 그래프를 인접리스트로 구현하면 각각 정점을 head로 시작해 인접한 노드들을 전부 연결리스트로 연결해준다.
  • 방향 그래프를 구현할 때는 각 정점을 head로 시작해 들어가는 노드를 전부 연결리스트로 연결한다.

❗ 인접행렬과 인접리스트의 효율성

1) 정점은 많은데 간선수가 적은 희소 그래프를 구현하려면 인접리스트가 효율적이다.

  • 인접행렬의 공간복잡도는 O(V^2)
  • 인접리스트의 공간복잡도는 O(V+E) (V-정점의개수, E-간선의 개수)

2) 정점이 적고 간선의 수가 많은 밀집 그래프인접행렬로 구현하는것이 효과적이다.

  • 행렬의 접근성 때문에 인접행렬은 정점과의 연결을 파악할 때 인덱스를 이용하므로 O(1)이면 충분
  • 인접리스트는 해당 노드를 찾을 때까지 탐색을 진행해야 하므로 많은 시간이 필요


그래프의 탐색

  • DFS는 그래프 상에 존재하는 임의의 한 정점으로부터 연결되어 있는 다른 정점으로 계속 나아가는 방법을 우선으로 하는 탐색법이다.
  • BFS는 그래프 상에 존재하는 임의 한 정점으로부터 연결되어 있는 모든 정점으로 나아간다.
  • BFS에서는 큐 자료구조를 이용해 탐색 순서를 설정할 수 있다.
  • 주로 두 노드 사이의 최단 경로 혹은 임의의 경로를 찾고 싶을 때 사용한다




참고자료

profile
도라에몽 암기빵

0개의 댓글