graph
- Graph는 Vertex와 Edge의 쌍이다.
- V는 vertex(혹은 node, 정점)의 집합(set)이고 E는 edge(간선)의 집합이다.
- vertex는 독립된 개체로 동그라미로 표현하고 edge는 두 vertex를 잇는 개체로 선이나 화살표가 있는 선으로 표현한다.
1. Directed graph
- 방향성이 있는 간선을 가지는 그래프
- 화살표가 있는 선을 사용한다.
- 일반적으로, 각 vertex는 숫자나 이름(알파벳)으로 구분한다.
- V = {1,2,3,4,5,6}
- edge는 두 개의 (출발 vertex, 도착 vertex)로 나타낸다.
- E = {(1,2,)(2,2),(2,4),(4,5),(5,4)}
- 2 개의 vertex에 대해 최대 2개의 간선이 존재할 수 있다.
- 즉, (4,5)는 (5,4) 서로 다른 edge이다.
- tree도 directed graph라서 사실 방향을 나타내 주어야 하지만 트리구조는 위에서 아래로만 작동하니까 생략해준다.
- self edge 로 자기 자신을 가리키는 것도 있다.
2. Undirected graph
- 무방향성 간선을 가지를 그래프
- 방향이 없으므로 직선을 사용한다.
- edge (4,5) = edge(5,4)
Terms
Adjacency 인접
(u,v)라는 edge가 있으면 vertex v와 vertex u가 '인접하다' 고 할 수 있다.
- undirected graph에서는 인접괍계는 동일하다. 즉, u가 v에 인접하면 v도 u에 인접하다.
- directed graph에서 인접관계는 동일하지 않다.
directed graph에서 '인접하다' 라는 것은
도착 vertex를 기준으로 얘기한다.
왼쪽 그림을 예시로
vertex2 (도착)는 vertex1에 인접하지만 그 반대는 성립하지 않는다.
:즉, vertex1로부터 vertex 2로 갈 수 있다.
Degree 차수
- Directed graph
- 진출 차수 (out-degree) : vertex를 나가는 edge의 수
- 위 예시에서 vertex2의 진출 차수는 3이다.
- 진입 차수(in-degree) : vertex로 들어오는 edge의 수
- 위 예시에서 vertex2의 진입 차수는 2이다.
- 일반적으로 말하면 차수는 진출 차수와 진입 차수를 합친 것이다.
- degree = out-degree + in-degree
- 진출 차수 (out-degree) : vertex를 나가는 edge의 수
- Undirected graph
진입 차수와 진출 차수는 정의할 수 없고 차수만 정의할 수 있다.
vertex2의 차수는 3이다.
cyclic
: 적어도 하나의 싸이클을 가진 그래프
acyclic
: 싸이클이 하나도 없는 그래프
그래프를 표현하는 2가지 방법
1. adjacency Matrix : 2차원 배열에 표현하는 방법
- 그래프를 표에 표현
- 서로 연결된 노드는 1, 연결이 없으면 0을 넣어서 표현
2. adjacency List : 배열에 노드들을 나열하고 인접한 노드들을 linked list 로 표현하는 방법
- 배열에 노드들을 넣고
- 연결이 있는 노드들을 linked list로 순서 상관 없이 나열한다.
- 엣지의 갯수를 m 이라고 할 때 총 노드의 갯수는 2m개
tree
부모-자식 관계이므로 계층, 그룹이 있음
트리의 노드 중에는 부모를 아는 경우, 자식만 아는 경우, 데이터가 섞여 있는 경우 등 많음
binary tree 이진 트리 ( 유용)
- 노드가 최대 2개까지만 붙는 트리
binary search tree (BST) 이진 탐색 트리
- 노드가 최대 2개 붙으면서 그 안의 데이터가
- 왼쪽노드와 그 이하 child node들은 현재 노드 보다 작아야 하고
- 오른쪽 노드와 그 이하 child node들은 현재 노드보다 크거나 같아야 한다.
< 발란스>
balanced : red-black tree, AVL tree
unbalanced : 너무 한쪽으로만 치우진 트리
complete binary tree 완전 이진 트리
: 모든 노드들이 왼쪽부터 채워져 있으면 됨
full binary tree 포화 이진 트리
하나의 child 노드를 가진 노드가 없다
즉. 노드가 child가 없거나 2개 이거나
perfect binary tree
양쪽으로 노드들이 레벨도 같고 모든 노드가 2개의 자식을 가지는 것
완벽한 피라미드 구조
레벨의 갯수를 n이라고 할 때 2n승 -1 개의 노드를 가진다.
f,g 처럼 자식 노드가 없는 노드는 leaf 라고 한다.
아마도 위 트리는 최대 2개의 노드를 가지는데 왼쪽부터 채워져 있으니까 complete binary tree 이면서
자식이 하나인 노드가 없기 때문에 full binary tree 도 될 것 같다.
'TIL ( CODESTATES)' 카테고리의 다른 글
자료 구조 구현하기 - BST, graph, tree (0) | 2020.11.06 |
---|---|
자료구조 구현하기 - queue, stack, linked list, hash table (0) | 2020.11.06 |
queue, stack - pseudocode, implementation (0) | 2020.11.03 |
구조 분해 할당 - 객체 (0) | 2020.11.02 |
새삼 너무 감격스러워서 / Kahoot 복습 (자료 구조) (0) | 2020.11.02 |