[ALGO] Lect3. 비선형 자료구조
교수: 성균관대학교 소프트웨어학과 허재필 교수님
사이트: http://www.kmooc.kr/courses/course-v1:SKKUk+SKKU_46+2021_T1/course/
이번 시간에는 대표적인
트리 자료구조
트리는
특징
- 정보는 nodes에 저장된다.
- 첫 번째 노드는
root 라고 불린다(위 그림에서 A에 해당) - 각 노드는
자손 노드(children) 들을 가질 수 있다. - root를 제외한 각 노드는 하나의
부모 노드(parent) 를 가진다.
용어
-
Degree
: 해당 노드가 갖는자식 노드의 개수 Leaf 노드
: degree = 0인 노드Internal 노드
: degree != 0인 노드
-
Sibling
: 같은 부모 노드를 공유하는자매 노드 -
Unordered tree
:자식 노드의 순서가 무시 될 수 있는 트리 구조
Ordered tree
:자식 노드간에 순서가 존재 하는 트리 구조 -
Path
:노드들의 시퀀스 $(a_0, a_1, …, a_n)$ (이때, $a_{k+1}$: $a_k$의 자식노드)-
예시: path(B,E,G)의 길이는 2이다.
-
-
depth
:루트노드부터 해당 노드까지의 경로의 길이 -
예시: depth(B)=1, depth(E)=2, depth(F)=3
-
-
height
: 트리에 존재하는가장 큰 depth값 - 예시:
⒜ 루트 노드만 존재하는 경우 height=0
⒝ 아무 노드도 존재하지 않는 경우 heigth=-1
- 예시:
-
ancestor
: a는 b의 ancestor (노드 a에서 노드 b로 가는 path가 존재할 때)
descendant
: b는 a의 descendant (노드 a에서 노드 b로 가는 path가 존재할 때)
strictly descendant
: 자기 자신이 자기 자신의 자손이나 부모가 되는 것을 금지시키는 조건※ 일반적인 경우, 자기 자신은 자기 자신의 ancestor이자 descendant이다. ※
표현
각 노드가
그래프 자료구조
그래프는
■ 응용
- SNS상에서 친구 관계
- 회로 사이의 component간의 연결성
- 선수과목 정보 표현
용어
-
vertex
:정점(node) , $V$라 표현 -
Objects
: 저장하고자 하는 객체. 유한개의nodes(혹은 vertices)의 집합 -
edge
:vertex 간의 연결 , $E$라 표현 -
Relationship
: 유한개의edges(혹은 arcs, links)의 집합 -
degree
:이웃 vertex의 개수 -
예시: degree($v_1$)=3
-
-
neighbor
:인접한(adjacent) vertex의 집합 -
sub-graph
: original graph에서일부 vertex와 edge를 sampling 하여 얻을 수 있는 그래프 -
path
:vertex간의 연결 : $(v_0, v_1, …, v_k)$trivial path
:length=0 인 pathsimple path
: 경로상에, 처음과 마지막을 제외하고 중복이 없는 경우
simple cycle
:처음과 마지막 vertex가 일치 하는simple path - 예시
case1) A-B-C : simple path
case2) A-B-C-A : simple path && simple cycle
case3) A-B-C-B-A : simple path아님
- 예시
-
connectedness(연결성)
: graph의 vertex끼리 어떤 path로든연결되어있는지 여부-
예시: 아래 그래프에서 흰색 영역에 존재하는 path가 끊어지면 conntedness 성질이 사라진다.
-
유형
그래프의 속성에 따라 다양한 종류의 그래프가 존재한다.
Undirected graph
: edge에방향이 없는 무향 그래프directed graph
: edge에방향성이 존재 하는 유향 그래프Weighted graph
:가중치 가 있는 그래프Tree
:unique path 를 갖는 conncted graphforest
:tree들의 모음
1. Undirected Graphs
vertices의 모음으로 표현되는
■ 특징
$V={v_1, v_2, …, v_n}$일 때
-
vertices의 개수 $│V│=n$
-
vertices를 연결하는 edges E = ${v_i, v_j}$
※ 순서가 없는 쌍 ※
■ 예시
연결성을 표현하기 위해 adjacency matrix
나 adjacency list
를 사용할 수 있다.
- 9개의 vertex가 존재: $V={v_1, v_2, …, v_9}$, $│V│=9$
- 5개의 edge가 존재: $E={{v_1, v_2}, {v_3,v_5}, {v_4, v_8}, {v_4, v_9}, {v_6, v_9}}$, $│E│=5$
■ 최대 edge개수
자기 자신으로 가는 edge는 없다고 가정하면,
\(|E|≤
_VC_2 =
\binom{|V|}{2} =
\frac{|V|(|V|-1|)}{2} =
O(|V|^2)\)
2. Directed Graphs
vertices의 모음으로 표현되는
■ 용어
-
in_degree
: 방향이 해당node로 향하는 edge의 개수
out_degree
: 해당node에서 나오는 방향 인 edge의 개수-
예시: in_degree($v_1$)=1, out_degree($v_1$)=2
-
-
source
:in_degree=0 인 node
sink
:out_degree=0 인 node -
strongly connected
:방향성을 고려 했을 때모든 pair간에 경로가 존재 하는 경우
weakly connected
:방향성을 무시 할 때모든 pair간에 경로가 존재 하는 경우 -
directed acyclic graph (DAG, 유향 비순환 그래프)
:순환하지 않는 유향 그래프 예시:
3. Weighted Graphs
edge가
■ 응용
vertex간의 거리나 에너지 소모등을 표현하는 경우에 주로 사용되며, 이러한 그래프를 통해
■ path length
단순히 연결된 path의 개수로 표현되는 un-weighted graphs와 달리, weighted graph는
예시: $\text{length of }(v_1, v_3, v_5, v_4)=5.1+1.3+1.1=7.5$
4. Tree
graph가
- cycle이 없음
- 연결 그래프
■ 특징
-
unique path 를 갖는다. ⇒ 따라서 $│E│=│V│-1$root를 제외한 모든 node가 하나의 parent와 연결된 path를 가지며, parent가 누구냐에 따라 구조가 달라진다고 생각하면 |E|=|V|-1의 결과를 쉽게 얻을 수 있다. -
하나의 edge를 추가하면 cycle 이 생긴다. -
하나의 edge를 제거하면 disconnected graph가 되며,두 개의 tree로 분리 된다.
5. Forest
■ 특징
-
cycle이 없다 ⇒ 따라서 $│E│<│V│$forest에서 root를 하나만 남도록 연결하면(edge를 추가하면) 하나의 tree가 된다. 즉, │E│=│V│-1인 tree의 edge 개수보다 forest의 edge개수가 더 적으니 언제나 │E│<│V│ -
tree의 개수 = $│V│-│E│$ |V|에서 |E|를 빼면 root의 개수가 되므로 tree의 개수는 |V|-|E| -
edge를 제거하면 tree가 하나 더 생성 된다.
표현
그래프를 표현하는 대표적인 방식은 다음과 같다.
1. Binary-relation list
■ 예시
${(1,2), (71,4), (3,5), (4,2), (4,5), (5,2), (5,3), (6,9), (7,9), (8,4)}$
■ 특징
- 메모리 사용량 = $│E│$
- 어떤 두 vertex간에 edge가 존재하는지 확인하기 위한 계산량 $≤│E│$
- 어떤 vertex의 neighbor를 구하기 위한 계산량 $≤│E│$
2. Adjacency Matrix
vertex $v_j$에서 $v_k$로 가는
■ 특징
- 메모리 사용량 = $│V│^2$
- 어떤 두 vertex 간에 edge가 존재하는지 확인하기 위한 계산량 = 1
- 어떤 vertex의 neighbor를 구하기 위한 계산량 = $O(│V│)$
※ computational overhead ※ - weighted graph인 경우, true/false 대신 weight 값으로 표현
3. Adjacency List
일반적인 알고리즘에서 가장 많이 사용되는 그래프 표현법으로,
■ 예시
vertex | adjacent to |
---|---|
v1 | v2, v4 |
v2 | |
v3 | v5 |
v4 | v2, v5 |
v5 | v2, v3 |
v6 | v9 |
v7 | v9 |
v8 | v4, v5 |
v9 |
■ 특징
- 메모리 사용량 = $│V│ < │E│$
References
- [집콕]인공지능을 위한 알고리즘과 자료구조: 이론, 코딩, 그리고 컴퓨팅 사고-비선형 자료구조, K-MOOC: http://www.kmooc.kr/courses/course-v1:SKKUk+SKKU_46+2021_T1/courseware/1158909c057347478d7386a2b7e97214/e9d736660cad4f76bcb9a05974fe0bf2/1?activate_block_id=block-v1%3ASKKUk%2BSKKU_46%2B2021_T1%2Btype%40vertical%2Bblock%4052b62ff6da2147c9a8a65a6056681d91