부분 순서(partial order)
모든 두 원소의 순서를 강제하지 않고 일부 선행 관계만 정하는 규칙입니다. 이 트리에서는 37이 먼저, 15가 7과 29보다 먼저, 56이 85보다 먼저라는 관계만 강제됩니다.
5. Grundlegende Datenstrukturen (7 Punkte)
선행지식이 전혀 없어도 이 페이지 하나에서 용어를 배우고, 작은 예제를 거쳐 실제 시험 풀이와 검산까지 따라가도록 구성했습니다.
시험 문언과 숫자·배점은 비공식 복기 자료 lines 246-268에서 가져왔습니다. 정의와 알고리즘은 현재 강의 Lecture 03 pp.46-51, 66-71, 80-81 및 Sheet05-GrpSol pp.7-12로 교차 확인했습니다. 이 문제의 key는 모두 서로 다르며, duplicate가 있는 일반 BST에서는 강의나 구현이 정한 equality 방향을 먼저 밝혀야 합니다.
기호를 모른 채 풀이를 외우지 않도록, 이 문제에서 실제로 쓰는 뜻과 작은 예를 먼저 확인합니다.
| 기호·용어 | 뜻 | 작은 예 |
|---|---|---|
| 노드(node / Knoten) | 키(key) 하나와 왼쪽·오른쪽 자식 연결을 담는 트리의 한 칸입니다. | 37이 전체 트리의 루트 노드입니다. |
| 간선(edge / Kante) | 부모와 자식 사이를 잇는 선이며 왼쪽 간선과 오른쪽 간선은 서로 다른 의미를 가집니다. | 37에서 15로 가는 선은 왼쪽 간선입니다. |
| 빈 포인터(nil) | 그 방향에 자식 노드가 없다는 뜻입니다. 값 0이나 실제 키가 아닙니다. | \(56.\text{left}=\text{nil}\)56.left=nil이므로 search(50)는 그 자리에서 실패합니다. |
| 왼쪽/오른쪽(L / R) | 현재 키와 목표를 비교한 뒤 각각 왼쪽 또는 오른쪽 자식으로 이동한다는 경로 표기입니다. | 23의 경로는 \(37(L)\to 15(R)\to 29(L)\)37(L)→15(R)→29(L)입니다. |
| 이진 탐색 트리(BST) | 모든 노드에서 왼쪽 부분 트리의 키는 더 작고 오른쪽 부분 트리의 키는 더 큰 트리입니다. | 15의 왼쪽에는 7, 오른쪽에는 29가 놓입니다. |
| 전위/중위 순회(Pre / In) | 전위 순회(Preorder)는 root-left-right, 중위 순회(Inorder)는 left-root-right 순서로 같은 트리를 읽는 규칙입니다. | 루트 37은 전위 순회의 첫 값이고 중위 순회의 가운데 분할점입니다. |
네, 많이 있습니다. 동일 subtree 안에서는 parent가 descendant보다 먼저라는 제약을 지켜야 하지만, 왼쪽 subtree와 오른쪽 subtree의 원소는 서로 interleave할 수 있습니다.
예를 들어 [37,56,15,85,29,7]도 같은 트리를 만듭니다. 37이 먼저이고, 15가 7·29보다 먼저이며, 56이 85보다 먼저라는 핵심 제약을 모두 만족합니다.
이 문제는 아무 permutation이나 된다는 뜻이 아닙니다. tree가 정의하는 ancestor partial order를 보존하는 순서만 가능합니다.
37이 먼저, 15가 7과 29보다 먼저, 56이 85보다 먼저라는 관계는 강제됩니다. 반면 15 부분 트리 작업과 56 부분 트리 작업의 상대 순서는 자유롭습니다.
7과 29도 둘 다 15의 자식이고 서로 조상 관계가 없어 15 뒤에서는 어느 쪽이 먼저 와도 됩니다.
핵심 규칙u\text{가 }v\text{의 조상}\;\Longrightarrow\;u\prec v
대안 [37,56,15,85,29,7]을 삽입하면 56은 37의 오른쪽, 15는 37의 왼쪽, 85는 56의 오른쪽, 29는 15의 오른쪽, 7은 15의 왼쪽이 됩니다.
순서가 원래 전위 순회와 크게 달라도 결과 간선(edge)이 모두 같으므로 올바릅니다.
핵심 규칙\langle37,56,15,85,29,7\rangle
[37,7,15,...]에서는 7이 먼저 37의 왼쪽을 차지하고 15가 7의 오른쪽에 붙어 원래 15 루트 부분 트리가 나오지 않습니다.
[37,85,56,...]에서도 85가 37의 오른쪽을 차지해 원래 구조와 달라집니다. 자손이 조상보다 먼저 들어간 것이 원인입니다.
핵심 규칙v\prec u\ \text{(자손이 조상보다 먼저)}\;\Longrightarrow\;\text{모양이 달라질 수 있음}
루트 37 뒤 왼쪽 부분 트리의 가능한 내부 순서는 [15,7,29] 또는 [15,29,7] 두 개입니다. 오른쪽은 [56,85] 한 개입니다.
길이 3과 2인 두 순서를 내부 순서를 보존하며 섞는 방법은 \(C(5,3)=10\)C(5,3)=10개이고 왼쪽 내부 순서 2개를 곱해 총 20개의 삽입 순서가 있습니다.
2\cdot\binom{5}{3}=20BST insertion 순서는 하나의 고정된 history가 아니라 ancestor 제약을 만족하는 여러 가능한 history입니다. 강제되는 관계와 자유롭게 섞을 수 있는 관계를 구분하면 ‘다른 순서가 있는가’에 예시와 이유를 함께 답할 수 있습니다.
모든 두 원소의 순서를 강제하지 않고 일부 선행 관계만 정하는 규칙입니다. 이 트리에서는 37이 먼저, 15가 7과 29보다 먼저, 56이 85보다 먼저라는 관계만 강제됩니다.
두 순회열 각각의 내부 순서는 유지하면서 한 줄로 섞는 것입니다. 서로 다른 부분 트리는 루트에서 즉시 분리되므로 이렇게 섞어도 상대 구조가 변하지 않습니다.
n개의 위치 중 k개를 고르는 방법 수입니다. 이 문제에서는 루트 뒤 다섯 위치 중 왼쪽 부분 트리 세 위치를 선택할 때만 선택 심화로 사용합니다.
C(5,3)=10이며 원문 정답에는 이 계산이 필수가 아닙니다.어떤 과목은 선수과목 뒤에만 들을 수 있지만 서로 독립인 과목은 어느 학기에 먼저 배치해도 됩니다. BST의 ancestor가 선수과목이고 descendant가 후속 과목이며, left와 right subtree는 독립 트랙입니다.
비유의 한계: 실제 수강에는 학기 수나 동시 수강 조건이 있지만 BST에는 오직 insertion 순서와 비교 path만 있습니다. 조합 개수는 설명용 심화이며 시험 문언의 필수 요구가 아닙니다.
15→7,29 / 56→85각 subtree의 parent가 descendants보다 먼저입니다.DAG 화살표는 강제 관계이고 화살표가 없는 sibling·다른 subtree 사이는 자유입니다. 아래 대안 sequence를 한 칸씩 재생하면 원래 edge가 그대로 만들어집니다.
root 10, left child 5, right child 20인 tree에서 [10,5,20] 외의 순서를 찾습니다.
root dependency는 자유가 아니므로 두 valid sequence 모두 10으로 시작합니다.
105와 20은 서로 ancestor가 아니어서 20을 5보다 먼저 넣어도 됩니다.
10,20\(5<10\)5<10이라 10.left로 가며 이미 있는 right subtree 20의 구조에 영향을 주지 않습니다.
작은 예제의 결론: [10,20,5]도 같은 tree를 만들므로 Preorder는 안전한 한 답이지 유일한 history가 아닙니다.
네. tree가 모든 key 쌍의 순서를 강제하지 않고 ancestor 관계만 강제하므로 독립인 작업의 순서를 바꿀 수 있습니다.
37이 먼저이고, 15가 7과 29보다 먼저이며, 56이 85보다 먼저여야 합니다. 자손이 먼저 오면 그 키가 조상 자리를 차지해 트리 모양이 달라집니다.
56은 37.right, 15는 37.left, 85는 56.right, 29는 15.right, 7은 15.left가 되어 모든 원래 edge를 재현합니다.
root와 ancestor dependency를 어기는 permutation은 중간 node가 먼저 빈 child를 차지합니다. 예를 들어 7이 15보다 먼저면 7이 37.left가 됩니다.
필수 답은 대안 하나와 ancestor/interleaving 이유입니다. 선택 심화에서는 왼쪽 내부 순서 2개와 위치 \(\text{interleaving} C(5,3)=10\)interleaving C(5,3)=10을 곱해 20개를 얻습니다.
37→15/56, 15→7/29, 56→85인지 확인합니다.C(5,3)=20계산을 구분합니다.힌트: 7이 삽입될 때 37.left가 비어 있는지 봅니다.
정답: 7이 15보다 먼저 37.left를 차지하고 15는 7.right가 되므로 원래 15-rooted left subtree와 달라집니다.
힌트: 둘이 서로 ancestor인지 확인합니다.
정답: 강제되지 않습니다. 둘은 root 37의 서로 다른 subtree root이므로 37 뒤에서는 어느 쪽을 먼저 삽입해도 됩니다.
Ja. 예: [37,56,15,85,29,7]. Root 37은 먼저, 각 parent는 descendant보다 먼저 와야 하지만 서로 독립인 left/right subtree 원소는 interleave할 수 있으므로 다른 순서가 존재한다.
복기 문언, 강의 정의, 공식 연습 풀이, 추가 유도를 구분해 표시합니다.
AuD Gedächtnisprotokoll SoSe 2025.md · lines 246-268 · 신뢰도/범위: 비공식 기억 복기5번의 sequence, 삽입·검색 key, 소문항 요구와 배점
정확한 시험 문언의 공식 공개본이 아니라 복기 자료이므로 강의 정의와 별도로 표시합니다.
Vorlesung\03BasicDataStructures.pdf · pp. 46-51 · 신뢰도/범위: 현재 강의 슬라이드binary tree·subtree·nil·height 용어와 Inorder/Preorder/Postorder 정의
Vorlesung\03BasicDataStructures.pdf · pp. 66-71 · 신뢰도/범위: 현재 강의 슬라이드BST invariant, unique-key BST의 Preorder 복원, Inorder 비유일성, search와 insertion
Vorlesung\03BasicDataStructures.pdf · pp. 80-81 · 신뢰도/범위: 현재 강의 슬라이드BST 연산 \(O(h)\)O(h), balanced와 degenerate height 차이
Übung\AuD26_Sheet05-GrpSol.pdf · pp. 7-10 · 신뢰도/범위: 공식 풀이BST insertion, traversal, reconstruction을 단계별로 그리는 현재 풀이 방식
Übung\AuD26_Sheet05-GrpSol.pdf · pp. 11-12 · 신뢰도/범위: 공식 풀이search path의 ancestor bound와 위반 경로 판정
마지막 생성: 2026-08-02 08:51