데이타구조

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
  • 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)