티스토리 뷰
트리 구조는 그래프(Graph, 꼭지점과 변으로 구성)의 한 종류로 1개 이상의 노드로 구성되며 사이클이 없는(acyclic graph) 그래프로 임의의 두노드간에 하나의 경로만이 존재합니다. 각 노드는 서로 중복되지 않는 원소로 구성된 부속트리(subtree)를 가질 수 있습니다. 트리 구조는 나무를 거꾸로 뒤집어 놓은 형태이며 최상위 노드는 Root(뿌리) 노드라 하고 레벨 1입니다. 루트 노드 아래로 한 단계씩 레벨(깊이)을 가지며 자식(child) 노드가 없는 노드를 leaf(잎)노드 또는 terminal(단말) 노드라 하고 자식이 하나라도 있는 노드를 Internal(내부)노드 또는 non-terminal 노드라 합니다. 트리에서 가장 큰 레벨 값을 트리의 깊이(depth)라 합니다. 자식 노드에 대하여 상위 노드를 부모(parent) 노드라하고 동일한 부모를 가진 자식 노드를 sibling(형제)노드라 합니다. 특정 노드의 부모 노드의 집합을 조상(ancestor)이라하고 반대로 특정 노드의 부속 트리의 모든 노드 집합을 자손(descendant)이라 합니다.
특정 노드의 자식 노드의 개수를 노드의 차수(degree) 또는 분지수라 하고 트리에서 가장 높은 값의 노드의 차수를 트리의 차수라 합니다. 트리 구조를 컴퓨터에 저장하기 위해서는 차수가 N인 트리의 경우에는 N개의 자식 노드 정보의 저장하기 위한 노드의 크기가 커지므로 상당히 비효율적이라는 문제가 있습니다. 이런 문제를 해소시켜주는 것이 차수가 2인 이진 트리입니다. 이진트리의 각 노드는 Left 링크는 자식 노드를 가리키고 Right 링크는 형제 노드를 가리키도록하여 어떤 차수의 트리도 이진 트리로 표현할 수 있습니다. 아래의 그림은 위의 트리 예제를 이진 트리로 표현한 것입니다.
그러나, 이진 트리는 저장 구조로서의 특별한 성질을 가지고 있기 때문에 자식노드가 2이하인 트리라는 점외에도 다음과 같은 특성이 있습니다.
- 빈(empty) 트리도 이진트리다.
- 레벨(깊이)이 n인 이진트리의 최대 노드 수는 이다.(노드가 1개면 높이가 1로 간주할 때)
레벨이 2면 1 + 2 = 4 -1 = 3 - 이진트리의 단노드 개수는 차수가 2인 노드의 개수 + 1이다.
위의 이진트리 예를 보면 차수가 2인 노드는 a,d,f이므로 단노드의 개수는 3+1=4이다. 실제로 단노드는 j,e,i.m 4개다.
위와 같은 특성을 바탕으로 다음과 같이 이진 트리를 분류할 수 있습니다.
정(full) 이진트리 : 단말 노드가 아닌 모든 노드의 차수가 2인 이진트리
포화(perfect) 이진트리 : 이진트리의 깊이(레벨)이 N일때 트리의 모든 노드가 꽉차서 최대 노드수 공식을 만족시키는 경우로 모든 단말노드의 깊이가 동일한 정 이진트리라는 특성이 있다.
완전(complete) 이진트리 : 포화 이진트리를 루트부터 차례로 위에서 아래로, 좌에서 우 방향으로 번호를 붙일때 끝 부분만 빈 상태를 말한다.
균형(balanced) 이진트리 : 모든 단말 노드의 깊이 차이가 최대 1인 이진트리를 말한다. 예측 가능성을 높인다.
편향(skewed) 이진트리 : 좌나 우 한쪽으로 치우친 이진트리
그런데, 위의 같은 방식으로 노드 5개를 풀려면 시간도 많이 걸리지만 노드 개수가 많아지면 그 계산을 감당할 수 없습니다. 무엇보다 누군가 이런 상황을 대비해서 누군가 수열로 정리해 놓은 것이 있으니 잘 활용하는 것이 좋겠습니다. 그 수는 바로 카탈란수(Catalan) 입니다. 벨기에의 수학자 카탈란이 하노이의 탑 문제를 생각하며 만들었다고 합니다.(위키피디아 참조) 음수가 아닌 정수 n에 대해서 n번째 카탈란수는 다음의 공식과 같습니다.
위의 공식을 0부터 15까지 대입하면 1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845가 됩니다. n개의 노드를 가진 이진 트리의 개수는 n번째 카탈란수와 동일합니다. 예제에서도 n이 2일때 2, 3일때 5임을 이미 확인할 수 있습니다. 또한 빈(Empty) 이진트리도 존재함을 기억하시면 0번째 카탈란수가 1임도 수긍이 되실것입니다. 5개의 노드를 가진 이진트리 개수는 42입니다.
카탈란수는 다음과 같이 응용할 수 있습니다.
- n + 1개의 단말 노드를 갖는 이진 트리의 개수
- n + 2각형을 n개의 삼각형으로 나누는 방법의 개수
- n + 1개의 항에 2개의 항에 괄호를 씌우는 모든 경우의 수
- n + 1개의 항에 이항연산자를 적용하는 모든 경우의 수
- 길이가 2n인 모든 다이크(Dyck) 단어의 개수
Dyck단어는 n개의 X, n개의 Y로 구성한 문자열을 처음부터 셀때 X가 Y보다 많거나 동일한 문자열을 말합니다.
n=2이면 XXYY, XYXY 두개입니다. - n개의 성냥개비로 오르막과 내리막이 대칭되는 산을 만들 수 있는 방법의 수
- n X n개의 정사각형으로 구성된 큰 정사각형의 양쪽 꼭지점을 작은 사각형의 변을 따라 이동할때 대각선을 지나치지 않고 갈수있는 최단 경로의 개수
'IT 일반' 카테고리의 다른 글
정렬(Sort)의 개념과 기법 - 정보올림피아드 문제풀이 (8) | 2015.03.30 |
---|---|
트리(Tree)의 운행과 알고리즘 - 정보올림피아드 문제풀이 (0) | 2015.03.25 |
진법 변환 - 정보올림피아드 문제풀이 (0) | 2015.03.18 |
for 루프와 배열 - 정보올림피아드 문제풀이 (0) | 2015.03.12 |
조건 분석하기 - 정보올림피아드 문제풀이 (2) | 2015.03.12 |