그래프에 대하여
Graphs are widely-used structure in computer science and different computer applications. We don't say data structure here and see the difference. Graphs mean to store and analyze metadata, the connections, which present in data. For instance, consider cities in your country. Road network, which connects them, can be represented as a graph and then analyzed. We can examine, if one city can be reached from another one or find the shortest route between two cities
(출처: http://www.algolist.net/Data_structures/Graph)
/*
1. 그래프란?
그래프란, 정점(Vertex)과 간선(Edge)의 집합으로 구성되어있는 비선형 자료구조이다.
오일러 경로 라는 이론에서 출발한다.
2. 그래프의 구성요소 및 용어
정점(vertex/node) : 노드, 정점... 꼭지점... 무슨 말이 필요하리...
간선(Edge/Link/line) : 각 꼭지점을 연결하는 선.
차수(degree): 꼭지점에 연결된 간선의 수
인접(adjant): 각기 다른 2개의 꼭지점이 변으로 이어져 있을 때 인접하다고 함.
경로(path): 첫 정점부터 임의의 정점까지 연결된 순서. 첫 정점은 시작 정점이라고 불리고, 경로의 마지막 정점이 종료 정점이라고 한다.경로 중 한 정점을 최대 한 번만 지나는 경로를 단순경로라고 한다.
사이클(cycle): 시작정점과 종료정점이 같으면 사이클이라고한다. 한 정점을 한번만 지나는 사이클을 단순 사이클이라고 불린다.
| |
path (simple) | cycle (simple)
|
3. 그래프의 종류
1. 간선들간에 방향성이 있는가 없는가에 따라서
없다: 무방향 그래프(무향 그래프, undirected graph)
정점들간에 순서가 없는 그래프.
(A,B)는 (B,A)와 같다.
무방향 그래프는 트리가 될 수 있다.
무방향 그래프의 경우에는 최대 변을 가질 수 있다.
n개의 정점을 가진 그래프는 최대 n(n-1)/2개의 변을 가질 수 있다.
이런 그래프를 완전 그래프라고 한다.
아래 그래프는 무방향 그래프이면서, 완전 그래프이다.
있다: 방향 그래프(유향 그래프, directed graph)
정점들간에 순서가 있는 그래프
(3,4)는 (4,3)와 다르다.
방향그래프인 경우 n개의 정점을 가진 그래프가 최대 n(n-1)개의 변을 가질 수 있고
그런 그래프를 완전 그래프라고 한다.
아래는 방향 그래프의 예이다.
한꼭지점으로 들어오는 변의 갯수를 입력차수, 나가는 변의 갯수를 출력 찻수라고 한다.
아래의 4정점을 예로 들면 입력차수는 1이고 출력 차수는 1이다.
2정점의 경우 입력차수는 2이고 출력차수는 0 이다.
(출처: https://upload.wikimedia.org/wikipedia/commons/5/51/Directed_graph.svg)
2. 간선에 가중치가 있는가 없는가에 따라서
가중치 그래프: 간선에 가중치가 할당되어 있는 경우. 여러 도시를 연결하는 도로망을 예로 들면 각 도로의 가중치는 도로의 길이 또는 최소시간이 될 수 있다.
3. 간선의 수는 어떤가
간선의 수가 최대인가?
완전 그래프
- 무방향인 경우. 정점이 n개일때, n*(n-1)/2개의 간선을 가진 경우
- 유방향인 경우. 정점이 n개일때, n*(n-1)개의 간선을 가진 경우
간선의 수가 v^2보다 적을 때
희소 그래프(Sparse Graph):
간선의 수가 v^2에 비례할 때
밀집 그래프(Dense Graph)
4. 기타
부분그래프: 말 그대로 부분그래프! 그래프의 일부를 따로 떼어놓은 그래프
4. 그래프의 표현법
그래프는 크게 인접행렬과 인접그래프로 표현할 수 있다!
인접행렬은 2차원 배열을 사용하고, 인접 그래프는 연결리스트를 사용한다.
인접행렬은 많은 메모리 공간을 요구하지만, 인접 그래프보다 빠른 접근이 가능하다. 간선이 많은 밀집 그래프에 적합하다.
(희소 그래프의 경우 메모리의 낭비가 발생한다.)
인접 그래프는 적은 메모리 공간을 요구하지만 인접행렬보다 느리다.
적은 메모리 공간을 요구하는 이유는 인접한 정점들만을 표현하기 때문이다.
간선의 수가 많지 않은 희소 그래프에 적합하다.
(출처:http://www.ida.liu.se/opendsa/OpenDSA/Books/TDDD86_2014/html/_images/GraphUD.png)
1. 인접행렬
위의 그림에서 (a)라는 그래프를 인접행렬로 표현한 것이 (b)이다.
무방향 그래프의 경우 대각선을 기점으로 대칭이다.
인접하지 않은 경우도 공간을 차지하므로 희소 그래프의 경우 메모리의 낭비가 발생한다.
2. 인접그래프
위의 그림에서 (a)라는 그래프를 인접 그래프로 표현한 것이 (c) 이다.
5. 그래프의 순회
http://blog.naver.com/PostView.nhn?blogId=kiho0530&logNo=150139178186
DFS순회
:http://enjoypg.com/17
BFS순회
:http://enjoypg.com/18