트리(Tree)
순환 없이 하나로 이어진 그래프. 꼭짓점(vertex)이 n개면 변은 정확히 n−1개이고, 어떤 두 점 사이에도 길이 꼭 하나뿐이다.
트리는 이어져 있으면서 순환(제자리로 돌아오는 고리)이 없는 그래프입니다. 겉보기에 다른 여러 조건이 모두 같은 뜻이라는 점이 트리를 특별하게 만듭니다. 꼭짓점이 n개인 그래프에 대해 다음은 서로 같습니다. 이어져 있고 순환이 없다. 이어져 있고 변이 n−1개다. 순환이 없고 변이 n−1개다. 어떤 두 점 사이에도 (같은 점을 두 번 지나지 않는) 길이 꼭 하나다. 이어져 있지만 변을 하나라도 빼면 끊어진다. 순환이 없지만 변을 하나라도 더하면 순환이 생긴다. 둘째와 셋째 조건이 보여 주듯, 변이 n−1개이기만 하면 '이어져 있다'와 '순환이 없다'는 한쪽이 다른 쪽을 부릅니다.
변이 n−1개인 이유는 잎(leaf)에 있습니다. 꼭짓점이 둘 이상인 트리에서 가장 긴 길을 잡으면 그 끝점은 이웃이 하나뿐인 잎입니다. 다른 이웃이 있다면 길을 더 늘이거나 순환이 생길 테니까요. 잎 하나와 그 변을 떼어 내면 꼭짓점이 하나 적은 트리가 남으니, 수학적 귀납법(mathematical induction)으로 변은 늘 꼭짓점보다 하나 적습니다.
보기:
이름 붙은 꼭짓점 n개 위의 트리는 몇 개일까요? 답은
한 점을 뿌리로 정하면 트리는 가계도나 폴더 구조처럼 위아래가 생깁니다. 뿌리 있는 트리는 '뿌리 하나와 그 아래 매달린 더 작은 트리들'이라는 재귀(recursion)적인 정의를 가지고, 그래서 트리 위의 계산은 대개 재귀로 짭니다. 자식이 많아야 둘이고 왼쪽 자식과 오른쪽 자식을 구별하는 이진 트리(binary tree)는, 점이 n개일 때 n번째 카탈랑 수(Catalan number)만큼의 모양이 있습니다. 쓰임새도 많습니다. 각 점의 왼쪽 가지에는 그보다 작은 값만, 오른쪽 가지에는 큰 값만 두는 이진 탐색 트리(binary search tree)는 이진 탐색(binary search)을 자료 구조로 옮긴 것입니다. 부모가 늘 자식보다 작도록 쌓은 힙(heap)은 가장 작은 값을 늘 뿌리에 두어 우선순위 큐(priority queue)를 만듭니다. 잎마다 기호를 달고 뿌리에서 그 잎까지 왼쪽 가지는 0, 오른쪽 가지는 1로 적으면 부호가 정해집니다. 기호의 빈도에 맞춰 평균(mean) 길이가 가장 짧도록 이런 트리를 만든 것이 허프만 부호(Huffman coding)입니다. 비교 정렬(comparison sort)이 할 수 있는 모든 비교를 가지로 펼친 결정 트리(decision tree)는 비교 정렬의 하한(comparison sorting lower bound)을 증명하는 도구이고, 예/아니오 질문으로 자료를 나누어 답을 내는 기계 학습(machine learning)의 결정 트리는 잎에 예측을 단 트리이며, 번갈아 두는 게임의 모든 수를 펼친 게임 트리(game tree)는 미니맥스(minimax)로 최선의 수를 고르는 데 쓰입니다. 또 문장의 짜임을 그린 구문 트리(parse tree)는 문맥 자유 문법(context-free grammar)에서 나옵니다.
이어지는 곳. 이어진 그래프는 모두 신장 트리를 품고 있고, 변마다 길이가 있을 때 길이의 합이 가장 작은 신장 트리가 최소 신장 트리(minimum spanning tree)입니다. 다익스트라 알고리즘(Dijkstra's algorithm)도 점마다 어느 이웃에서 왔는지를 기록하면 출발점을 뿌리로 하는 최단 경로(shortest path) 트리를 남깁니다. 합집합-찾기(union-find)라는 자료 구조는 서로 겹치지 않는 무리 하나하나를 트리로 두고 그 뿌리를 무리의 대표로 삼습니다. 두 점이 같은 무리인지는 뿌리가 같은지로 확인하고, 두 무리를 합칠 때는 한 뿌리를 다른 뿌리 아래에 매답니다. 그래서 동치류(equivalence class)를 빠르게 합치고 확인할 수 있습니다. 공통 조상에서 갈라져 나온 언어나 생물의 계통수(phylogenetic tree)도 트리입니다. 옛 언어를 뿌리로, 그 후손 언어들을 가지로 그리는 비교 언어학(comparative linguistics)의 어족 나무가 그 예입니다.
이 개념이 나오는 긴 글
이 개념 위에 세워진 것
이 개념을 언급하는 페이지
- 그래프
… 한 덩어리로 이어져 있으면서 순환(같은 변을 되짚지 않고 제자리로 돌아오는 고리)이 없는 그래프는트리입니다. 두 무리 사이에만 변이 있는 그래프에서 짝을 짓는 문제는 홀의 정리와 안정 매칭으로, 변에 …
- 최단 경로
… 점들을 담아 둡니다. 점마다 어느 이웃에서 왔는지 기록해 두면, 그 화살표들이 출발점을 뿌리로 하는트리(최단 경로 트리)를 이룹니다. 왼쪽 위 출발점에서 시작합니다. 아래 ◀ ▶로 한 단계씩 진행해 보세요. …
- 문맥 자유 문법
… 거리⟧의 표와 같은 생각입니다. 구문 트리는 순환 없이 이어진 그래프, 곧 그래프 이론에서 말하는트리입니다. 한 기호에 규칙이 여럿일 수 있으니 문법은 기호를 기호열 하나로 보내는 함수가 아니라 여러 …
- 카탈랑 수
… 이진 트리의 모양도 같은 이유로 C_n 가지입니다. 뿌리의 왼쪽 가지와 오른쪽 가지가 A와 B입니다(트리, 재귀). 행렬 n+1개를 곱하는 순서(괄호 치는 방법)도 C_n 가지입니다. 이 수는 금세 너무 …
- 이진 탐색
… 푸는 이진 탐색은 분할 정복의 가장 단순한 경우입니다. 이 생각을 자료 구조로 굳힌 것이 이진 탐색트리로, 각 점의 왼쪽 가지에는 그보다 작은 값만, 오른쪽 가지에는 큰 값만 두어 뿌리에서부터 이진 탐색하듯 …
- 재귀
… 반복으로 그리지만, 경계 곳곳에 전체를 닮은 작은 복사본이 나타납니다. 재귀 호출이 뻗어 나간 모양은트리가 됩니다. 타입을 붙인 단순 타입 람다 계산에서는 고정점 결합자에 타입을 붙일 수 없어서 이런 재귀가 …
- 비교 정렬의 하한
… \log_2 n! 입니다. 알고리즘이 할 수 있는 비교를 모두 가지로 그리면 잎이 n! 개 이상인 이진트리(결정 트리)가 되고, 그 높이가 최악의 비교 횟수입니다. 직접 겨뤄 봅시다. 원소 의 순서를 상대가 …
- 힙과 우선순위 큐
… 쓰면 두 조작 모두 O(\log n) 이면 됩니다. (최소) 힙은 모든 부모가 자식보다 작거나 같은 이진트리입니다. 형제끼리의 순서는 따지지 않으니 정렬보다 훨씬 느슨한 조건이지만, 가장 작은 원소가 늘 뿌리에 …
- 최소 신장 트리
… 있으면 그 위의 가장 긴 전선을 걷어 내도 여전히 이어져 있으니까요. 그래서 답은 언제나 모든 점을 잇는트리, 곧 신장 트리입니다. 문제는 후보가 너무 많다는 것입니다. 점 10개 사이의 신장 트리는 케일리 공식 …
- 허프만 부호
… 부호도 다른 부호의 앞부분이 되지 않게 하는 것(접두 부호)입니다. 접두 부호는 잎마다 글자를 단 이진트리와 같습니다. 뿌리에서 왼쪽 가지는 0, 오른쪽 가지는 1로 읽으며 내려가다 잎에 닿으면 한 글자가 …
- 결정 트리와 랜덤 포레스트
… 거기서는 딱 잘린 문턱 대신 소프트맥스 점수로 몇 개의 '전문가' 신경망을 고릅니다. 나무는 그래프 이론의트리이기도 해서, 꼭짓점 n개에 변이 n − 1개입니다.
- 게임 트리 탐색: 미니맥스와 몬테카를로 트리 탐색
… 그 수를 둔 판을 그리고, 그 판마다 상대가 둘 수 있는 수를 다시 그리고, 게임이 끝날 때까지 이어 가면트리하나가 생깁니다. 이것이 게임 트리입니다. 끝난 판(잎)에는 내 쪽에서 본 점수를 붙입니다. 이기면 +1, …
- 타입 추론: 힌들리–밀너
… 성질은 보편 성질의 한 예입니다. 식의 나무 자체는 문맥 자유 문법으로 파싱해 얻고, 단일화는 두나무를 겹쳐 맞추는 알고리즘이라, 발생 검사를 빼먹으면 나무에 되부름하는 고리가 생겨 버립니다. 하위 …
- 선형 논리와 선형 타입
… ⅋ 연결마다 두 선 가운데 하나를 지우는 모든 방법에 대해 남은 그래프가 순환이 없고 연결되어 있으면(곧트리이면), 그리고 그때에만 그 그물은 어떤 시퀀트 증명을 그린 것입니다. 선형 람다 항에도 같은 끈 그림을 …
- 라플라시안과 그래프 라플라시안
… 부등식)이 방법을 받쳐 줍니다. 나무 세기. 아무 꼭짓점 하나의 행과 열을 지운 행렬식은 신장트리의 개수입니다(키르히호프의 행렬–트리 정리, 1847). L = BB^{\mathsf T} ( B 는 접속 …