데이타구조
2016-04-19
중간고사 안내
이진 트리 관련 정의
과제 제출 안내
- Google Drive 공유 폴더를 통해 (종이 X, 메일 X)
-
[새로 만들기] 버튼을 눌러
DS16<이름><학번> 폴더를 만들고 (예: DS16김연아123456)
만들어진 폴더를 우클릭하여
폴더 공유설정으로 kyagrd@gmail.com 에게 공유 (편집권한) - Google 메일 계정만 있으면 Google Drive 서비스 이용 가능
- Google 메일 계정은 무료로 만들 수 있으며
참고로 안드로이드 스마트폰 사용자는 누구나 이미 보유
중간고사 안내
- 10문제 출제함 (총점 100점)
- 용어/개념 2문제 각 5점씩
- 시간복잡도 관련 1 문제 5점
- Stack과 Queue 추상 데이타 타입의 내부 구현을 어떻게 하느냐에 따른 장단점 관련 10점짜리 1개, 5점짜리 1개
- 리스트 관련 간단한 코드의 결과를 묻는 2문제 각 10점씩
- C관련 기본 개념 sizeof관련 문제들 총 20점
- 트리 inorder, preorder, postorder 관련 문제들 15점
- 재귀함수 작성 문제 15점
- 두시간이면 너무 긴 거 같아서 1시간 30분
(그래도 한 문제당 9분이나 됨)
배열/리스트 순차 탐색
- 처음부터 하나씩 다음으로 진행하면서 원하는 값이 있는지
- 길이 n인 배열/리스트를 순차 탐색하는 시간복잡도는 O(n)
배열 이진 탐색
- 크기 순서로 정렬되어 있을 경우에 가능
- 배열과 같이 Random Access가 되는 데이타 구조일 때
의의 위치로 O(1)만에 접근 가능한 경우에 가능 - 오름차순으로 정렬되어 있다고 할 때 한가운데 데이타 확인
- 원하는 값이면 탐색 성공하여 종료
- 원하는 값이 더 작으면 앞쪽 반쪽에 대해서 탐색 반복
- 원하는 값이 더 크면 뒤쪽 반족에 대해서 탐색 반복
- 길이 n = 2^k라고 할 때 범위가 대략 절반씩 감소해 k번 이내로 탐색 종료. k = log n이므로 시간복잡도는 O(log n)
이진 트리 관련 정의들
- Binary Search Tree
- Proper Binary Tree 또는 Strict Binary Tree
(대부분의 다른 곳에서 Full Binary Tree) - Perfect Binary Tree
(우리 교과서 등 소수의 책에서만
Full Binary Tree를 이것과 동일하게) - Complete Binary Tree
- Skewed (편향된) vs Balanced (균형잡힌)
Binary Search Tree (BST)
- 일반적으로 중복되는 데이타 없다고 가정
- Base Case 다음 둘 중 어느 걸로 선택해도 무방
- NULL
- 1개의 데이터로만 이루어진 트리
- Inductive Case:
트리가 data와 왼쪽/오른쪽 하위 트리 tl, tr로 이루어질 때- 모든 왼쪽 하위 트리 tl의 데이타 < data
그리고 tl도 BST - 모든 오른쪽 하위 트리 tr의 데이타 > data
그리고 tr도 BST
- 모든 왼쪽 하위 트리 tl의 데이타 < data
- BST에서 탐색 시간복잡도 일반적으로 O(log n)아님!!!
균형잡힌(balanced)인 경우만 O(log n)
Proper 또는 Strict Binary Tree
- 다른 대부분의 곳에서는 Full Binary Tree의 정의가 이것
- Base Case: 다음 둘 중 어느 걸로 선택해도 무방
- NULL
- 1개의 데이터로만 이루어진 트리
- Inductive Case:
트리가 data와 왼쪽/오른쪽 하위 트리 tl, tr로 이루어질 때- tl, tr 둘 다 NULL이 되던가 아니면 둘 다 NULL 아님
- tl, tr 각각도 Proper/Strict/Full Binary Tree
- 즉, 가지가 항상 두 개씩 뻗고 하나만 뻗는 경우는 없다
Perfect Binary Tree
-
우리 교과서 등 소수의 책에서만
Full Binary Tree를 이것과 동일하게 정의 - Base Case: 다음 둘 중 하나를 선택 가능
- NULL
- 데이타 1개로 이루어진 트리
- Inductive Case:
트리가 data와 왼쪽/오른쪽 하위 트리 tl, tr로 이루어질 때- tl과 tr의 높이가 같고 tl과 tr 각각이 Perfect Binary Tree
- 높이(또는 깊이) k일 때 데이타 개수는 2^k - 1
Complete Binary Tree
- 모든 Perfect Binary Tree는 Complete Binary Tree이다.
- Perfect Binary Tree에서
level order로 맨 끝에 오는 노드를 하나씩 제거해 나가며
구성되는 모든 트리가 Complete Binary Tree - 다음 슬라이드 Skewed vs Balanced만 설명하고
남은 수업시간에는 이진트리에 대한 level order를
프로그램으로 작성해 보도록 합시다- level order가 대표적으로 Queue를 활용하는 코드
-
Perfect B.T. 이면 Complete B.T. 이고 Proper/Strict B.T.
(하지만 그 역은 성립 안함)
Skewed vs Balanced
- 당연히 Balanced가 아닐 때 편향되었다(Skewed)고 한다
- 직관적으로는 왼쪽과 오른쪽 하위 트리의 높이(또는 깊이가) 많이 차이나는 노드가 존재할 때
- Balanced(균형잡힌)를 정의하는 방법 여러가지 가능
- 노드가 n개인 트리의 높이가 항상 O(log n)으로 보장되면 Balanced Tree라고 정의할 수도
- 모든 노드에서 왼쪽 오른쪽 하위 트리의 높이 차이가 어떤 상수값 c이하일 때를 Balanced라고 정의할 수도 있다
- 이 경우 Complete Binary Tree는 c=1로 주어졌을 때도 balanced가 될 것이고 Perfect Binary Tree는 c=0으로 주어도 balanced가 될 것이다
데이타구조
By 안기영 (Ahn, Ki Yung)
데이타구조
2016-04-19
- 2,016