이 글은 "파이썬 알고리즘 인터뷰 (박상길 지음)"을 읽고 주관적으로 요약한 글입니다.
- 트리
- 계층형 트리 구조를 시뮬레이션 하는 추상 자료형
- 서로 연결된 노드의 집합
- 재귀로 정의된 자기 참조 자료구조
- Recursively Defined Self-Referential
- 즉, 트리는 자식도 트리, 그 자식도 트리 (서브트리)
- 트리의 명칭
- 차수 (Degree)
- 자식 노드의 개수 - 크기 (Size)
- 차수 + 자신을 포함(1) - 깊이 (Depth)
- 루트에서 현재 노드까지의 거리 - 높이 (Height)
- 현재 노드에서 리프 노드까지의 거리 (가장 깊은)
- 차수 (Degree)
- 그래프 vs 트리
- 트리는 순환(cycle)이 없어야 함
- 간선을 따라 탐색했을 때, 이미 탐색된 노드를 다시 만나지 않음 - 트리는 부모 -> 자식 단방향
- 트리는 부모를 1개 가짐
- 트리는 루트를 1개 가짐
- 트리는 순환(cycle)이 없어야 함
- 이진 트리 (BT, Binary Tree)
- 모든 노드의 차수가 2 이하를 만족하는 트리
- 이진 트리를 사용하는 이유
- 왼쪽, 오른쪽 자식 노드 구조로 간결함
- 여러 알고리즘 구현도 간단하게 가능 - 종류
- 정 이진 트리 (Full BT)
- 모든 노드가 0 또는 2개 자식 노드를 가짐 - 완전 이진 트리 (Complete BT)
- 마지막 레벨을 제외한 모든 레벨에 노드가 완전히 채워짐
- 마지막 레벨은 가장 왼쪽부터 채워짐 - 포화 이진 트리 (Perfect BT)
- 모든 레벨의 노드가 완전히 채워짐
- 모든 리프노드가 동일한 깊이를 가짐
- 정 이진 트리 (Full BT)
- 이진 탐색 트리 (BST, Binary Search Tree)
- 정렬된 이진 트리
- 왼쪽 서브트리는 현재 노드보다 작은 값
- 오른쪽 서브트리는 현재 노드보다 같거나 큰 값 - 탐색의 시간 복잡도가 O(log n)
- 그러나 트리의 모양이 균형을 제대로 이루지 못하면 O(n)
- 이를 위해 '자가 균형 이진 탐색 트리'가 존재
- 정렬된 이진 트리
- 자가 균형 이진 탐색 트리 (Self-Balancing BST)
- 높이를 가능한 낮아지도록 유지하는 트리 구조
- AVL 트리 / 레드-블랙 트리
- 자바의 해시맵
- 해시 테이블의 개별 체이닝시 연결 리스트와 레드-블랙 트리 병행 저장
- 효율적인 저장구조
- 트리 순회 (Traversal)
- 트리 자료구조에서 각 노드를 정확히 한 번 방문하는 과정
- 종류
- 전위 순회 (Pre-Order)
- NLR - 중위 순회 (In-Order)
- LNR - 후위 순회 (Post-Order)
- LRN
- 전위 순회 (Pre-Order)
- 신장 트리 (Spanning Tree)
- 정의
- 그래프 내의 모든 정점을 포함하고 사이클이 없는 트리 (각 노드를 연결하는 간선이 1개)
- 따라서 간선의 개수는 V - 1 (모든 노드가 연결되며 사이클이 없는 경우는 V-1개를 넘지 않음) - 최소 신장 트리 (Minimal Spanning Tree)
- 간선의 가중치 합이 가장 작은 Spanning Tree
- [주의] 노드와 노드 사이의 최소 가중치 경로가 아님
- 정의
'책읽기' 카테고리의 다른 글
[스프링5 프로그래밍 입문][chap03] 스프링 DI (0) | 2022.03.04 |
---|---|
[스프링5 프로그래밍 입문][chap01/chap02] 들어가며/스프링 시작하기 (0) | 2022.02.04 |
[파이썬 알고리즘 인터뷰][그리디] 쿠키 부여 (0) | 2021.09.01 |
[파이썬 알고리즘 인터뷰][그리디] 주유소 (0) | 2021.09.01 |
[파이썬 알고리즘 인터뷰][그리디] 태스크 스케줄러 (0) | 2021.09.01 |