Balancierte Suchbäume, Rotationen und binäre Max-Heaps
균형 탐색 트리, 회전, 이진 max-heap
중요한 독일어·영어 용어는 유지하되 설명과 학습 동선은 한국어 중심으로 제공합니다.
이 챕터의 문항별 독립 학습 페이지
단원 페이지에는 개요와 학습 순서만 둡니다. 각 문항의 용어·비유·수식·단계별 풀이·실제 채점은 아래 독립 페이지에서 이어집니다.
II-5 · 2개 선택
고급 자료구조 사이의 동치 또는 포함 관계에 대해 옳은 설명 두 개를 고르시오.
독립 개념 강의와 실제 채점 열기 →II-6 · 2개 선택
트리에서 rotateLeft()와 rotateRight() 같은 rotation 함수에 대해 옳은 설명 두 개를 고르시오.
독립 개념 강의와 실제 채점 열기 →II-7 · 2개 선택
이진 max-heap에 대해 옳은 설명 두 개를 고르시오.
독립 개념 강의와 실제 채점 열기 →
30초 핵심 요약
레드-블랙 트리(red-black tree)는 먼저 BST이며, 그 위에 색과 흑색 높이(black-height) 조건을 얹은 구조다. AVL 트리(AVL tree)는 모든 노드에서 부분 트리 높이 차이가 1 이하인 더 엄격한 BST다. 회전(rotation)은 BST의 중위 순회 순서를 보존하는 국소 포인터 변경이다. 이진 최대 힙(binary max-heap)은 거의 완전한 이진트리와 부모 >= 자식 조건만 요구하므로 BST가 아니며, 삽입·최댓값 삭제는 회전이 아니라 교환·힙 정리(swap/heapify)로 복구한다.
BST 연산은 \(O(h)\)O(h)이다. AVL·RB 트리는 \(h = O(\log n)\)h = O(log n)을 유지한다. AVL은 \(B(x) \in \{-1, 0, +1\}, \text{RB}\)B(x) ∈ {-1, 0, +1}, RB트리는 적색 노드 연속 금지(no red-red)와 동일한 흑색 높이(equal black-height)를 지킨다. 최대 힙의 루트는 최댓값이며 삽입·최댓값 추출은 \(O(\log n)\)O(log n)이다.
문장에 Jeder, immer, brauchen keine가 나오면 작은 반례를 먼저 찾고, 구조를 BST·AVL·RB·힙(heap) 네 범주로 분리한다.
시험 연결
II
\(\text{exactly}_{\text{two}}\)exactly(two)
2
- II-5
- II-6
- II-7
정답 조합을 외우는 대신 각 문장을 BST 순서, 균형·색 규칙, 회전 필요 여부, 힙의 모양·순서로 분해해 참거짓을 판정한다.
로컬 말뭉치의 복원 시험 Markdown에는 독일어 움라우트가 깨진 글자가 있다. 아래 독일어 문장은 명확한 움라우트만 복원했으며 수학적 의미는 그대로 보존했다.
먼저 알아야 할 용어와 전제
- BST 불변식(BST invariant): 강의 규약에 따라 왼쪽 부분 트리의 모든 키는 현재 노드의 키 이하이고, 오른쪽 부분 트리의 모든 키는 현재 노드의 키 이상이다.
- 트리 높이(Höhe): 탐색 트리 연산은 루트에서 리프로 가는 경로를 따르므로, 높이 h가 최악의 경우 비용을 결정한다.
- 회전(Rotation/Drehung): 중위 순회 키 순서를 보존하면서 포인터 관계만 국소적으로 바꾸는 연산이다.
- 힙의 모양과 순서: 이진 최대 힙(binary max-heap)은 거의 완전한 이진트리이며 각 노드를 부모·자식과만 비교한다.
개념 강의
이 세 문항의 핵심은 '비슷하게 생긴 이진트리'를 같은 것으로 착각하지 않는 것이다. BST는 좌우 키 순서를 지키는 검색 구조이고, AVL과 레드-블랙 트리(red-black tree)는 BST의 높이를 \(O(\log n)\)O(log n)으로 제한하는 균형 규칙을 추가한다. 힙(heap)은 최댓값을 빨리 꺼내기 위한 우선순위 큐(priority queue) 구현이므로 좌우 전체 정렬을 요구하지 않는다.
이진 탐색 트리(Binary Search Tree, binärer Suchbaum)는 모든 노드 z에서 왼쪽 부분 트리의 키가 z.key 이하이고 오른쪽 부분 트리의 키가 z.key 이상인 구조다. 레드-블랙 트리(red-black tree, Rot-Schwarz-Baum)는 BST에 노드 색, 검은 루트, 적색 노드 연속 금지, 동일한 흑색 높이 규칙을 추가한다. AVL 트리(AVL tree, AVL-Baum)는 BST이며 모든 노드 x에서 '오른쪽 높이 - 왼쪽 높이'인 균형 인수(balance factor) B(x)가 -1, 0, +1 중 하나다. 이진 최대 힙(binary max-heap)은 거의 완전한 이진트리이며 루트가 아닌 모든 x에서 \(\text{parent}.\text{key} \ge x.\text{key}\)parent.key ≥ x.key를 만족한다.
- BST 키 순서를 먼저 검사한다. AVL·RB는 모두 BST 계열이므로 BST 순서가 깨지면 바로 탈락한다.
- 회전(rotation)은 키 순서를 바꾸지 않는다. 바뀌는 것은 부모·자식 모양(parent-child shape)이다.
- 힙(heap)의 왼쪽 자식과 오른쪽 자식 사이에는 정렬 관계가 없다.
회전(rotation)은 중위 순회 키 순서를 보존한다. 즉 \(A < x < B < y < C\)A < x < B < y < C와 같은 순서가 회전 전후에 유지된다. 레드-블랙 트리의 높이는 \(O(\log n)\)O(log n)이고 강의의 상한은 \(h \le 2 \log_{2}(n+1)\)h ≤ 2 log₂(n+1)이다. AVL 트리의 높이도 \(O(\log n)\)O(log n)이며 강의 상한은 \(h \le 1.441 \log_{2} n\)h ≤ 1.441 log₂ n이다. 힙은 맨 아래 층을 제외하면 완전 이진트리이므로 높이가 \(O(\log n)\)O(log n)이다.
일반 BST의 탐색·삽입·삭제 비용은 \(O(h)\)O(h)이며 최악의 경우 h는 n이 될 수 있다. 강의 요약에서 AVL·레드-블랙 트리의 탐색·삽입·삭제는 \(\Theta(\log n)\)Θ(log n)이다. 스플레이 연산(splay operation)은 회전을 사용하며 한 번의 연산은 \(O(h)\)O(h), 연속 연산의 분할 상환 비용(amortized cost)은 \(O(\log n)\)O(log n)이다. 최대 힙의 삽입·최댓값 추출은 교환·힙 정리(swap/heapify)를 사용해 \(O(\log n)\)O(log n)에 실행되고 최댓값 읽기는 \(O(1)\)O(1)이다.
루트 9와 자식 8, 7로 이루어진 올바른 최대 힙은 오른쪽 자식 7이 루트보다 작으므로 BST가 아니다. 레드-블랙 트리는 AVL 균형을 만족하지 않아도 유효할 수 있으며 강의도 \(\text{AVL} \ne \text{Rot}-\text{Schwarz}\)AVL != Rot-Schwarz를 명시한다. Sheet06의 관계에서는 모든 AVL 트리를 레드-블랙으로 색칠할 수 있지만, 이는 BST 모양의 색칠 가능성에 관한 명제이지 힙에 관한 명제가 아니다. 일반 BST 삽입은 탐색 후 리프를 붙이므로 자기 균형 변형을 쓰지 않는다면 rotateLeft나 rotateRight가 필요하지 않다.
- Jeder
- immer
- brauchen keine
- binärer Suchbaum
- Max-Heap
- Rotation
- Heapify
- Rot-Schwarz-färbbar
- 필요조건과 충분조건 (necessary vs. sufficient)
회전·Red-Black·Heap 실험실
다음 상태를 먼저 예측한 뒤 한 단계 실행하여 확인하세요.
새 문장 판별 체크리스트
- 1. 문장이 동일성 또는 부분집합 관계를 주장하는가? AVL ⊆ 레드-블랙 색칠 가능 ⊆ BST이지만, RB ⊄ AVL이고 힙 ⊄ BST임을 확인한다.
- 2. 이 구조가 탐색 트리인가? BST·RB·AVL·스플레이는 중위 순서를 보존하지만, 힙은 부모·자식 우선순위만 보존한다.
- 3. 삽입 복구가 회전을 사용하는가? 스플레이와 AVL은 회전을 사용할 수 있고, 일반 BST는 리프를 붙이며, 힙은 교환으로 위로 올린다.
- 4. 힙에서는 루트와 부모·자식 규칙만 검사한다. 중위·전위 순회 결과가 정렬되어 있다고 추론하지 않는다.
- 5. 거짓인 전칭 명제에는 가장 작은 반례를 사용한다. 보통 노드 세 개면 충분하다.
- 6. 정답이 정확히 두 개인 문항(exactly two)에서도 먼저 A~D를 각각 판정한 뒤 정답 수를 센다.
능동 회상
- 레드-블랙 트리(red-black tree)가 단순히 색칠된 트리가 아니라 무엇 위에 색 규칙을 얹은 구조인지 말하라. — 레드-블랙 트리는 이진 탐색 트리(binary search tree) 위에 적색·흑색 색상, 검은 루트, 적색 노드 연속 금지(no red-red), 동일한 흑색 높이(equal black-height) 규칙을 추가한 구조다.
- 왜 최대 힙(max-heap) [9, 8, 7]은 BST가 아닌가? — 오른쪽 자식 7이 루트 9보다 작으므로 BST의 '오른쪽 부분 트리 키 >= 루트' 조건을 위반한다. 하지만 부모 >= 자식이므로 최대 힙은 맞다.
- AVL 삽입에서 LR 경우(case)의 회전 순서를 말하라. — 처음 불균형해진 노드 z의 왼쪽 자식 y와 y의 오른쪽 자식 x가 이루는 지그재그(zig-zag)이다. 먼저 rotateLeft(y), 다음으로 rotateRight(z)를 한다.
- 스플레이 트리 삽입(splay tree insertion)이 회전을 쓰는 이유를 한 문장으로 설명하라. — BST처럼 삽입한 뒤 새 노드를 루트로 스플레이하며, 스플레이 연산은 zig, zig-zig, zig-zag 회전으로 구성되기 때문이다.
- 최대 힙의 최댓값 삭제(delete-max) 세 단계를 말하라. — 루트의 최댓값을 제거하고 마지막 노드를 루트로 옮겨 완전한 모양(complete shape)을 유지한 뒤, 아래 방향 힙 정리(heapify down)로 부모·자식 최대 힙 성질을 복구한다.
구두시험 질문
- II-5의 네 보기를 포함 관계로만 다시 판정해 보라. 힙(heap), RB, AVL, BST 중 무엇이 무엇의 부분집합인가?
- 일반 BST 삽입, AVL 삽입, 스플레이 삽입, 최대 힙 삽입을 각각 핵심 복구 연산(repair primitive) 중심으로 비교하라.
- 최대 힙의 최댓값 삭제(delete-max)가 왜 다시 힙을 만드는지 불변식 관점에서 설명하라.
시험 직전 요약
\(\text{RB} = \text{BST} +\)RB = BST +색·흑색 높이\((\text{color}/\text{black}-\text{height}), \text{AVL} = \text{BST} +\)(color/black-height), AVL = BST +엄격한 높이 균형, 힙 = 완전한 모양 + 부모·자식 우선순위이며 BST가 아니다.
일반 BST는 \(O(h)\)O(h), AVL·RB 연산은 \(\Theta(\log n)\)Θ(log n), 힙 삽입·최댓값 추출은 \(O(\log n)\)O(log n), 최댓값·루트 읽기는 \(O(1)\)O(1)이다.
노드 세 개인 힙 [9,8,7]이면 '힙은 BST다'와 '최댓값은 리프에 있다'를 반박할 수 있다. 10,20,30을 정렬 순서로 삽입하면 AVL 회전을 유발하기에 충분하다.
각 보기에서 키 순서를 보존해 탐색하는지, 높이·색으로 균형을 맞추는지, BST 포인터 변경으로 회전하는지, 교환으로 힙 정리(heapify)하는지를 묻는다.
출처
- 출처 파일: AuD Gedächtnisprotokoll SoSe 2025.md; 근거 페이지·구간: MC section II, questions 5-7; 뒷받침하는 내용: SoSe 2025 복기 자료의 세 객관식 문항 문구, 배점, 정확히 2개 선택 규칙을 뒷받침한다.; 검증 상태: reconstructed; 자료의 역할: reconstructed_exam; 추출 품질: \(\text{clean}_{\text{text}}\)
clean(text) - 출처 파일: Vorlesung\03BasicDataStructures.pdf; 근거 페이지·구간: pp. 66, 69, 71; 뒷받침하는 내용: BST 순서 정의, BST 탐색 경계 \(O(h)\)
O(h), 회전 없이 탐색 경로를 따라가는 일반 BST 삽입을 뒷받침한다.; 검증 상태: verified; 자료의 역할: current_lecture; course term: Binärer Suchbaum; 추출 품질: \(\text{clean}_{\text{text}}\)clean(text) - 출처 파일: Vorlesung\04AdvancedDataStructures.pdf; 근거 페이지·구간: pp. 2-6, 12-18, 24-29; 뒷받침하는 내용: 레드-블랙 트리는 색, 루트, 연속된 빨강 금지, 검은 높이 규칙을 갖는 BST이며, 회전은 레드-블랙 복구에 쓰는 상수 시간 포인터 변경이라는 내용을 뒷받침한다.; 검증 상태: verified; 자료의 역할: current_lecture; course term: Rot-Schwarz-Baum, Rotation, Schwarzhöhe; 추출 품질: \(\text{clean}_{\text{text}}\)
clean(text) - 출처 파일: Vorlesung\04AdvancedDataStructures.pdf; 근거 페이지·구간: pp. 45-55, 59-69; 뒷받침하는 내용: AVL 정의, 균형 인수 관례, AVL 높이 경계, AVL 트리의 레드-블랙 색칠 가능성, 레드-블랙 트리가 반드시 AVL은 아니라는 사실, AVL 회전 경우를 뒷받침한다.; 검증 상태: verified; 자료의 역할: current_lecture; course term: AVL-Baum; 추출 품질: \(\text{clean}_{\text{text}}\)
clean(text) - 출처 파일: Vorlesung\04AdvancedDataStructures.pdf; 근거 페이지·구간: pp. 72-84; 뒷받침하는 내용: 스플레이 트리는 BST이며, 탐색이나 삽입 뒤 zig, zig-zig, zig-zag 회전으로 접근한 노드나 새 노드를 루트로 올린다는 내용을 뒷받침한다.; 검증 상태: verified; 자료의 역할: current_lecture; course term: Splay-Baum; 추출 품질: \(\text{clean}_{\text{text}}\)
clean(text) - 출처 파일: Vorlesung\04AdvancedDataStructures.pdf; 근거 페이지·구간: pp. 91-98, 110-112; 뒷받침하는 내용: 이진 최대 힙의 정의, 완전 트리 모양, 부모 키 순서, 루트의 최댓값, 힙은 BST가 아니라는 사실, 위쪽 교환을 이용한 삽입, 마지막 노드 교체와 heapify를 이용한 최댓값 추출을 뒷받침한다.; 검증 상태: verified; 자료의 역할: current_lecture; course term: Binärer Max-Heap, heapify, Priority Queue; 추출 품질: \(\text{clean}_{\text{text}}\)
clean(text) - 출처 파일: Übung\AuD26_Sheet06.pdf; 근거 페이지·구간: pp. 1-6; 뒷받침하는 내용: 공식 연습문제가 레드-블랙 삽입·삭제, AVL 삽입·삭제·유효성, BST·레드-블랙 색칠 가능 트리·AVL 트리의 관계를 묻는다는 점을 뒷받침한다.; 검증 상태: verified; 자료의 역할: exercise_sheet; course term: Übungsblatt 06; 추출 품질: \(\text{clean}_{\text{text}}\)
clean(text) - 출처 파일: Übung\AuD26_Sheet06-Sol.pdf; 근거 페이지·구간: pp. 8-17; 뒷받침하는 내용: 공식 해설이 BST 순서와 높이 균형으로 AVL을 검사하고, AVL 회전 경우와 AVL ⊆ RB ⊆ BST 관계를 제시하며, 갱신이 많은 작업에는 레드-블랙 트리를 권장한다.; 검증 상태: verified; 자료의 역할: official_solution; course term: Übungsblatt 06 Lösungen; 추출 품질: \(\text{clean}_{\text{text}}\)
clean(text)
AI 후속 학습 프롬프트
마지막 생성: 2026-08-03 03:24