Graph

Graph

개요

  • Graph 관련 용어
  • Graph 를 표현하는 세 가지 방법


용어

Graph Edge 와 Vertex 로 연결된 Set
Degree(차수) Vertex 에 연결된 Edge 의 갯수
Path Edge 로 연결된 Vertex 들의 Sequence
Cycle 첫 Vertex 와 마지막 Vertex 가 같은 Path
Connected 임의의 Vertex 들 간에 Path 가 존재하면 Connected
graph
from coursera algorithms part2 lecture note


그래프 관련 질문

  • V1 과 V2 사이에 Path 가 존재하는가?
  • V1 에서 V2 로 가는 최단 경로는?
  • 사이클이 있는가?
  • 각 Edge 를 정확히 한번만 방문하는 사이클이 존재하는가? - Euler tour
  • 각 Vertex 를 정확히 한번만 지나는 사이클이 존재하는가? - Hamilton tour
  • 모든 Vertex 를 연결시킬 수 있는 방법이 있는가? - Connectivity
  • 모든 Vertex 를 연결하는 최적의 방법은 무엇인가? - MST
  • 임의의 Vertex 제거할 경우에 Connected 그래프를 Disconnected 그래프가 되게 만드는 Vertex 가 있는가? - Biconnectivity
  • 교차하는 Edge 가 없도록 그래프를 표현할 수 있는가? -Planarity
  • 두 개의 인접한 리스트는 같은 그래프를 표현 하는가? - Graph isomorphism


그래프를 표현하는 3가지 방법

Set of Edges
Set of Edges
Set of Edges Representation

각 edge 들이 어떤 vertex 에 연결되어 있는지에 대한 정보들만 가지고 표현하는 방법. 거의 쓰이지 않는 방식.


Adjacency Matrix
Adjacency Matrix
Adjacency Matrix Representation

인접행렬. (7)-(8) 의 경우에 adj[7][8] = adj[8][7] = true 의 형태로 표현 됨. Degree 가 높은 dense 한 vertex 들을 가지는 그래프에서 유용하지만 sparse 한 그래프의 경우 메모리의 낭비가 심함.


Adjacency List
Adjacency List
Adjacency List Representation

인접 리스트로 표현하는 방법. 대부분의 경우 실전에서 그래프를 표현 할 때는 이 방식으로 사용. 실제 그래프의 경우 dense (degree 가 높은) 한 경우 보다 sparse (degree 가 낮은, vertex 는 많아도 각 vertex 에 연결된 edge 수는 적은) 한 경우가 일반적.


구현

Coursera 강의에서는 LinkedList 가 아닌 Bag 이라는 데이터 구조를 사용하는데, 그냥 LinkedList 를 사용해서 구현했다.


참고한 자료

Yaboong's Picture

Yaboong

Oskar Schindler was a mere opportunist and a corrupt businessman. Yet, when it seemed that great evil was taking over the world, it was not nobles, intellectuals, or religious leaders who rose to defy it and save lives—it was a corrupt opportunist, Oskar Schindler.

Massachusetts, US linkedin github