트리란 계층적인 관계를 나타내는 노드의 집합체
트리의 특징
1) 모든 노드는 0개 혹은 그 이상의 자식노드를 가진다.
2) 루트 노드를 제외한 각 노드는 하나의 부모노드를 가진다.
degree: 한 노드가 가지는 자식의 수
-> leaf(degree가 0) / internal(degree가 1 이상)
sibling: 같은 부모노드를 가지는 노드
트리자녀의 순서 여부에 따라 ordered tree / unordered tree
-> 대부분 unoredered tree이나 가계도와 같은 특수한 경우에는 ordered tree 일 수 있음
path(경로): 트리에서 노드의 sequence
-> 바로 앞 노드가 다음 노드의 부모여야 함
-> 경로의 길이: 경로의 노드를 잇는 선의 개수
depth(깊이): 루트노드로부터 해당 노드까지의 길이
-> 루트노드로부터 선택된 노드까지의 경로는 unique하다.
height(높이): 모든 노드의 depth 중 가장 큰 값
ex.루트노드만 있다면 0 / 노드가 없는 경우(도 트리일 수 있음) -1
ancestor, descendant: ancestor가 descendant보다 항상 위에 존재
-> 일반적으로 자기 자신은 자기 자신의 조상이자 자손이다.
-> strict 경우에는 자기 자신을 제외한다.
자식노드들의 list representation을 주로 사용
-> A노드는 3개의 자녀를 가지고 있기 때문에 3개의 포인터
-> 각각의 포인터는 A노드의 자식인 B, C, D를 참조
그레프? 데이터 사이의 인접한 관계
object(vertex): 저장하고자 하는 객체
edge(arc,link): 관계성
-> N개의 vertex? v1부터 vN까지의 N개의 vertex
-> edge ? {Vi, Vj}로 표현 (Vi->Vj, Vj->Vi)
V개의 vertex가 있는 undirected 그래프에서 edge의 최대 개수?
V * (V - 1) / 2
degree: 자기자신의 adjacent한 이웃의 개수
sub graph: vertex와 엣지를 샘플링해서 일부만 가져 왔을 때
-> 모든 vertex와 edge가 original graph에 존재해야 한다.
path(경로): (V1, ..., Vk)로 표현, 인접한 vertex는 반드시 엣지 존재
-> 경로의 길이: 경로의 vertex를 잇는 엣지의 개수(undirected 그래프)
-> trivial path: length가 0인 것(자기자신에 머물러있는 것)
simple path: 경로상에 처음과 마지막을 제외했을 때, 안에서 중복이 없는 경로
simple cycle: simple path이면서 처음과 마지막 vertex 같은 것
connected?
connected vertex : 두 vertex 사이에 경로가 있는 것
connected graph: 그래프 내 어떤 두 vertex를 집어도 그 사이에 경로가 있는 것 <-> unconnected 한 쌍의 vertex라도 그 사이 경로가 없는 것
경로의 길이: 경로를 따라 갔을 때 엣지에 써있는 weight의 합
-> 여러 경로가 있을 수 있음(shortest path는 길이가 최소화되는 경로)
-> in_degree: 들어오는 엣지의 개수
-> out_degree: 출발하는 엣지의 개수
-> source: in_degree가 0인 vertex = 나로 들어오는 것은 없고 나가기만 함
-> sink: out_degree가 0인 vertex
-> strongly connected : 방향성을 인정했을 때 모든 pair간에 경로가 존재
-> weakly connected: 방향성을 무시하고 연결성을 따졌을 때 그래프가 연결되어 있음
1) binary-relataion list
ex.{(1,2), (2,4),...}
2) adjacency matrix
ex. (1, 4) 연결되어 있으면 v*v 매트릭스의 (1,4)에 true (혹은 weight)
vertex 개수를 V개이면 V제곱개만큼의 메모리 사용
3) adjacency list
(강의 듣고 정리) k-mooc 인공지능을 위한 알고리즘과 자료구조: 이론, 코딩, 그리고 컴퓨팅 사고