이진 나무 구조 강윤섭 2008년 5월 23일.

Slides:



Advertisements
Similar presentations
언어의 자서전 소단원 (1) 단원. 언어의 특성 기호성 자의성 사회성 규칙성 창조성 역사성.
Advertisements

1. 가족생활주기와 문화 2. 가족생활주기의 단계와 과업 1948 년 Hill & Duvall – 가족은 서로 의존하는 관계로서 가족 구성원의 개별적 생활주기의 집합으로 취급 가족생활주기 – 가족의 형성부터 해체까지 가족생활을 통하여 지속적으로 나타나는 일련의 특징적인.
출석수업 과제 – 총 5문제, 10월 25일 제출 정보통계학과 장영재 교수.
알고리즘 기본 개념 정렬 알고리즘 탐색 알고리즘 알고리즘 복잡도.
자료구조: CHAP 7 트리(1) 순천향대학교 컴퓨터공학과 하 상 호.
▣ 금연 프로그램 운용(안) 구 분 실 시 내 용 일 정 사전조사 교육프로그램실시
Report #5 - due: 4/13 다음 10*5의 희소 행렬 A, B를 고려하라.
MS-Access의 개요 1강 MOS Access 2003 CORE 학습내용 액세스 응용 프로그램은 유용한 데이터를
수치해석 6장 예제문제 환경공학과 천대길.
Report #2 - Solution 문제 #1: 다음과 같이 프로그램을 작성하라.
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
6장 트리.
CHAP 7:트리.
강의 #7 트리(Tree).
경영사례 및 영업협상 방법론.
Chapter 9 – 구조형과 리스트 처리 Outline 9.1 자신 참조 구조형 9.2 선형 연결 리스트 9.3 리스트 연산
C언어 응용 제 10 주 트리.
NML 프로그래밍 소개 2004년 9월 9일 신재호 서울대학교 컴퓨터공학부 년 봄, A 수업에서 김재황님이 사용했던 것을 다듬은 자료입니다.
Tail-recursive Function, High-order Function
프로그래밍 랩 – 7주 리스트.
Chapter 07. 기본 함수 익히기.
KIM HEESANG PL/SQL 2 KIM HEESANG
공학컴퓨터프로그래밍 Python 염익준 교수.
CHAP 7: 트 리 (1) 한 성 대 학 교 정보통신공학과 봉 정 식.
IT CookBook, 자바로 배우는 쉬운 자료구조
쉽게 배우는 알고리즘 6장. 해시 테이블Hash Table
Introduction To Data Structures Using C
Tree & Heap SANGJI University Kwangman Ko
CHAP 7:트리 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
C 언어 교육 02 주차 – scanf & 반복문과 조건문 교육부장 조하정.
C언어 응용 제10주 실습 해보기 제8장 트리.
Tree & Heap SANGJI University Kwangman Ko
CHAP 7:트리 C로 쉽게 풀어쓴 자료구조 생능출판사 2005.
Report #3 - due: 4/6 100*100의 2개의 희소 행렬 A, B를 전달 받아서 이들의 덧셈을 구하고, 그 결과의 행렬 C를 반환하는 add_sparse_matrix(A, B, C)를 다음과 같이 작성하라. 희소 행렬은 sparse_matrix 타입으로 표현된다.
Quiz #7 다음 수들을 합병 정렬과 퀵 정렬 알고리즘을 이용하여 오름 차순으로 정렬하였을 때, 데이터 이동 회수를 각각 구하라. 여러분은 정렬 과정을 단계별로 보이면서 이동 회수를 추적해야 한다. 단, 퀵 정렬시에 피봇으로 배열의 왼쪽 첫 번째 원소를 선택한다. 5.
효율적인 메모리 사용을 위한 free 명령어 삽입 알고리즘
Term Projects 다음에 주어진 2개중에서 한 개를 선택하여 문제를 해결하시오. 기한: 중간 보고서: 5/30 (5)
15장 컬렉션 프레임워크 Section 1 컬렉션 프레임워크의 개요 Section 2 리스트 Section 3 셋
제주 REC 거래 방식 변경.
기존 REC거래시스템 회원사의 신재생 통합포털 회원가입 설명서.
컴퓨터 프로그래밍 기초 - 10th : 포인터 및 구조체 -
선택 정렬 #define SWAP(x, y, t) {(t) = (x); (x) = (y); (y) = (t);}
보고서 (due 5/8) 다음과 같은 방식으로 문제를 해결하시오. 문제 분석 알고리즘 작성 프로그램 작성 테스트 및 검증
Eclipse CDT에서 프로젝트를 Export 하고 Import 하는 방법
Hanoi Tower.
자료구조: CHAP 7(2) 트리 순천향대학교 컴퓨터공학과 하 상 호.
메모리 타입 분석을 통한 안전하고 효율적인 메모리 재사용
3강. 컴퓨터와의 기본적인 소통수단 - I 연산자란? 컴퓨터와 소통하기 위한 다양한 방법들
보고서 #7 (기한: 6/2) 2개의 스택, stk1, stk2를 이용하여 큐를 구현하라.
리스트(List)를 이용한 자료 관리 이점숙 /
객체기반 SW설계 팀활동지 4.
CHAP 12 : 탐색 C로 쉽게 풀어쓴 자료구조 생능출판사 2011.
조 병 규 Software Quality Lab. 한 국 교 통 대 학 교
Excel 일차 강사 : 박영민.
보고서 #2(제출기한: 09/23) 다음 문제를 해결하시오. (7)
DA :: 퀵 정렬 Quick Sort 퀵 정렬은 비교방식의 정렬 중 가장 빠른 정렬방법이다.
5장. 선택 알고리즘.
05. General Linear List – Homework
7주차: Functions and Arrays
Chapter 10 데이터 검색1.
[297탄] 반드시 길러야 할 4가지 공부 습관 자습 습관 복습 습관 동기부여 습관 셀프 테스트 습관
Chapter 07 트리.
(Ⅰ) 독서와 언어의 본질 언어의 본질 1 2 [고등 국어] – 독서와 문법 독서의 본질 (1) 독서의 특성
컴퓨터공학과 손민정 Computer Graphics Lab 이승용 교수님
트리 (Logical) Data Structures Linear list Tree Graph Linear structures
자료구조 자료구조의 개요 배열 선형 리스트 스택 큐 트리.
제 29 강 스트링(string) 다루기 s a i s . s T i h t g r i n.
 6장. SQL 쿼리.
                              데이터베이스 설계 및 실습 #6 - SQL 실습 한국외국어대학교 DaPS 연구실                              
C++ Espresso 제15장 STL 알고리즘.
Presentation transcript:

이진 나무 구조 강윤섭 2008년 5월 23일

목차 이진 나무 구조란? 나무의 원소 나열 앞순위 나열 안순위 나열 뒷순위 나열 이진 검색 나무 구조 삽입 삭제 검색

이진 나무 구조 여러 개의 자료를 표현하는 자료구조 잎(Leaf)와 가지(Node)로 이루어짐. 가지가 언제나 2개의 작은 나무를 포함하는 경우에 이진 나무 구조(Binary tree)라고 함. type ‘a tree = Leaf | Node of ‘a tree * ‘a * ‘a tree

이진 나무 구조 – int tree Leaf Node (Leaf, 1, Leaf) Node (Leaf, 1, Node(Leaf, 2, Leaf)) 1 1 2

이진 나무 구조 – int tree Node( Node(Leaf, 2, Leaf), 1, Node(Leaf, 3, Node(Leaf, 4, Leaf))) 1 2 3 4

앞순위 나열 나무 구조 Node (L, v, R) 이 주어졌을 때, v를 먼저 나열하고, 그 다음에 L의 원소, R의 원소 순으로 나열하는 방식. [2; 1; 4; 3; 5] 2 1 4 5 3

뒷순위 나열 나무 구조 Node (L, v, R) 이 주어졌을 때, L의 원소, R의 원소 순으로 먼저 나열하고 맨 나중에 v를 나열하는 방식. [1; 3; 5; 4; 2] 2 1 4 5 3

안순위 나열 나무 구조 Node (L, v, R) 이 주어졌을 때, L의 원소, v, 그리고 R의 원소 순으로 나열하는 방식. [1; 2; 3; 4; 5] 2 1 4 5 3

preorder 이진 나무를 받아서 나무의 원소들을 앞순위 나열한 리스트를 계산하는 함수 preorder를 작성하라. # preorder;; - : 'a tree -> 'a list = <fun> # preorder Leaf;; - : 'a list = [] # preorder (Node( Node(Leaf, 1, Leaf), 2, Node(Node(Leaf, 3, Leaf), 4, Node(Leaf, 5, Leaf))));; - : int list = [2; 1; 4; 3; 5]

postorder 이진 나무를 받아서 나무의 원소들을 뒷순위 나열한 리스트를 계산하는 함수 postorder를 작성하라. # postorder;; - : 'a tree -> 'a list = <fun> # postorder Leaf;; - : 'a list = [] # postorder (Node( Node(Leaf, 1, Leaf), 2, Node(Node(Leaf, 3, Leaf), 4, Node(Leaf, 5, Leaf))));; - : int list = [1; 3; 5; 4; 2]

inorder 이진 나무를 받아서 나무의 원소들을 안순위 나열한 리스트를 계산하는 함수 inorder를 작성하라. # inorder;; - : 'a tree -> 'a list = <fun> # inorder Leaf;; - : 'a list = [] # inorder (Node( Node(Leaf, 1, Leaf), 2, Node(Node(Leaf, 3, Leaf), 4, Node(Leaf, 5, Leaf))));; - : int list = [1; 2; 3; 4; 5]

preorder let rec preorder t = match t with | Node (l, v, r) -> v :: ((preorder l) @ (preorder r)) | Leaf -> [] ;;

postorder let rec postorder t = match t with | Node (l, v, r) -> (postorder l) @ (postorder r) @ [v] | Leaf -> [] ;;

inorder let rec inorder t = match t with | Node (l, v, r) -> (inorder l) @ [v] @ (inorder r) | Leaf -> []

이진 검색 나무 나무 구조 Node (L, v, R) 이 주어졌을 때, L에는 v보다 작은 원소만, R에는 v보다 큰 원소만 들어가 있는 나무 구조. 여러 개의 자료 중에 원하는 것을 빠르게 찾아낼 수 있다. http://www.cs.jhu.edu/~goodrich/dsa/trees/btree.html x <x >x

삽입 나무 구조 Node (L, v, R) 에 새 원소 x를 추가하기. x가 v보다 크면 R에, v보다 작으면 L에 넣는다. v와 x가 같으면 추가하지 않는다. v <v >v x

insert 이진 검색 나무에 새 원소를 추가하는 함수 insert를 작성하라. # insert;; - : 'a tree -> ‘a -> 'a tree = <fun> # insert Leaf 1;; - : int tree = Node (Leaf, 1, Leaf) # insert (Node (Node(Leaf, 1, Leaf), 3, Node(Node(Leaf, 5, Leaf), 6, Leaf))) 4;; - : int tree = Node (Node (Leaf, 1, Leaf), 3, Node (Node (Node (Leaf, 4, Leaf), 5, Leaf), 6, Leaf))

insert let rec insert t x = match t with | Node (l, v, r) -> if x = v then t else if x < v then Node(insert l x, v, r) else Node(l, v, insert r x) | Leaf -> Node(Leaf, x, Leaf) 18 18

찾기 나무 구조 Node (L, v, R) 에서 원소 x를 찾기. x가 v보다 크면 R에서, v보다 작으면 L에서 x를 찾는다. v와 x가 같으면 찾았다고 보고한다. (Some x) 못 찾은 경우에는 없다고 보고한다. (None) type ‘a option = Some of ‘a | None

search 이진 검색 나무에서 값을 찾는 함수 search를 작성하라. # search;; - : 'a tree -> ‘a -> 'a option = <fun> # search Leaf 1;; - : int option = None # search (Node (Node(Leaf, 1, Leaf), 3, Node(Node(Leaf, 5, Leaf), 6, Leaf))) 5;; - : int option = Some 5

search let rec search t x = match t with | Leaf -> None | Node (l, v, r) -> if v = x then Some x else if v > x then search l x else search r x ;;

검사 나무 구조 Node (L, v, R) 이 정상적인 이진 검색 나무 구조인지 검사한다. v L은 이진 검색 나무이며, L의 모든 원소는 v보다 작다. R은 이진 검색 나무이며, R의 모든 원소는 v보다 크다. Leaf 하나뿐인 나무 구조는 정상적인 이진 나무 구조이다. v <v >v

check_smaller & check_larger 주어진 이진 나무의 원소들이 모두 어떤 값보다 작으면서 이진 검색 나무 구조의 조건을 만족하는지 검사하는 함수 check_smaller와 더 큰지 검사하는 check_larger를 작성하라. 모든 원소가 x보다 작은 이진 검색 나무 Node(L, v, R)은 아래의 조건을 만족한다. v는 x보다 작다. L은 이진 검색 나무이며, L의 모든 원소는 v보다 작다. R은 이진 검색 나무이며, R의 모든 원소는 v보다 크다. R은 이진 검색 나무이며, R의 모든 원소는 x보다 작다. 단, Leaf는 이진 검색 나무이다.

check_smaller & check_larger let rec check_smaller t x = (내용) and check_larger t x = (내용) ;; # check_smaller;; - : 'a tree -> 'a -> bool = <fun> # check_larger;; - : 'a tree -> 'a -> bool = <fun> # check_smaller (Node (Node (Leaf, 1, Leaf), 3, Node (Leaf, 5, Leaf))) 6;; - : bool = true # check_smaller (Node (Node (Leaf, 1, Leaf), 3, Node (Leaf, 5, Leaf))) 4;; - : bool = false

check_smaller & check_larger let rec check_smaller t x = match t with | Leaf -> true | Node (l, y, r) -> y < x && check_smaller l y && check_larger r y && check_smaller r x and check_larger t x = match t with | Leaf -> true | Node (l, y, r) -> y > x && check_smaller l y && check_larger r y && check_larger l x ;;

check 주어진 이진 나무가 이진 검색 나무 구조의 조건을 만족하는지 검사하는 함수 check을 작성하라. 이진 검색 나무 Node(L, v, R)은 아래의 조건을 만족한다. L은 이진 검색 나무이며, L의 모든 원소는 v보다 작다. R은 이진 검색 나무이며, R의 모든 원소는 v보다 크다. 단, Leaf는 이진 검색 나무이다. # check;; - : 'a tree -> bool = <fun>

check let check t = match t with | Leaf -> true | Node (l, v, r) -> check_smaller l v && check_larger r v ;;