그래프 형 자료 구조란 노드(Node, 점)과 그 노드를 연결하는 간선(Edge, 선)을 하나로 모아놓은 구조를 일컫는다. 즉, 연결되어 있는 객체 간의 관계를 표현할 수 있는 자료구조이다. 또한 그래프는 여러개의 고립된 부분 그래프(Isolated Graph)로 구성될 수 있다.
무방향 그래프(Undirected Graph)
무방향 그래프의 간선은 양방향으로 갈 수 있다.( (A,B) 와 (B,A)는 같다.)
방향 그래프(Directed Graph)
간선에 방향이 존재하는 그래프이다.( <A,B> 와 <B,A>는 다르다.)
가중치 그래프(Weighted Graph)
간선에 비용이나 가중치가 할당된 그래프이다. 네트워크로 불린다.
연결 그래프(Connected Graph)
무방향 그래프에 있는 모든 정점 쌍에 대해서 항상 경로가 존재하는 경우의 그래프이다. 트리가 이에 포함된다.
비연결 그래프(Disconnected Graph)
무방향 그래프에서 특정 정점쌍 사이에 경로가 존재하지 않는 경우의 그래프이다.
사이클(Cycle)
단순 경로의 시작 정점과 종료 종점이 동일한 경우의 그래프이다. 단순 경로란 경로중에서 반복되는 정점이 없는 경우를 말한다.
비순환 그래프(Acyclic Graph)
사이클이 없는 그래프이다.
인접 리스트(Adjacency List)
인접 리스트로 그래프를 표현하는 것이 가장 일반적인 방법이다. 모든 정점을 인접 리스트에 저장한다. 즉, 각각의 정점에 인접한 정점을 리스트로 표현한 방식이다.
그래프내에 적은 숫자의 간선만을 가지는 희소 그래프(Sparse Graph)인 경우에 사용된다. 어떤 노드에 인접한 노드들을 쉽게 찾을 수 있고, 인접 리스트 전체를 조사하기 때문에 그래프에 존재하는 모든 간선의 수를 알 수 있다. 단, 정점의 리스트에 있는 노드의 수만큼 시간이 소요된다.
인접 행렬(Adjacency Matrix)
인접 행렬은 NxN 불린 행렬(Boolean Matrix)로써 matrix[i][j]가 true라면 i->j 로의 간선이 있다는 뜻이다.
그래프에 간선이 많은 밀집 그래프(Dense Graph)의 경우 사용된다. 두 정점을 연결하는 간선의 존재여부를 쉽게 알 수 있으며 정점의 차수 또한 빠르게 알 수 있다. 단, 어떤 노드에 인접한 노드를 찾기 위해서는 모든 노드를 순회해야한다. 또한 모든 간선의 수는 인접행렬 전체를 조사하기 때문에 오래걸린다.
깊이 우선 탐색(DFS, Depth-Frist Search)
루트 노드, 혹은 다른 임의의 노드부터 시작해 다음 분기에 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법이다. 모든 노드를 방문하고자 하는 경우에 이 방법이 선택된다.
너비 우선 탐색(BFS, Breath-Frist Search)
루트 노드, 혹은 다른 임의의 노드부터 시작해 인접한 노드들을 먼저 탐색하는 방법이다. 두 노드 사이의 최단 경로 혹은 임의의 경로를 찾고자 할때 이 방법을 사용한다.
트리는 그래프의 한 종류인 자료구조 로써, 하나의 루트 노드를 가지며 루트노드는 0개 이상의 자식을 가지고있다. 그 자식노드 또한 0개이상의 자식노드를 가지며 이를 반복하는 자료구조이다.