chap 5: Trees

Similar documents
Chapter 4. LISTS

슬라이드 제목 없음

untitled

chap 5: Trees

Microsoft PowerPoint - Chap5 [호환 모드]

4.1 관계

Microsoft PowerPoint - ch09 - 연결형리스트, Stack, Queue와 응용 pm0100

Microsoft PowerPoint - Chap5 [호환 모드]

A Hierarchical Approach to Interactive Motion Editing for Human-like Figures

제 1 장 기본 개념

슬라이드 1

7장

Chapter 4. LISTS

슬라이드 1

Microsoft PowerPoint - ch10 - 이진트리, AVL 트리, 트리 응용 pm0600

Chapter 4. LISTS

슬라이드 1

C 언어 강의노트

untitled

리스트 (list), 선형리스트 (linear list): 순서를가진항목들의모임 집합 : 항목간의순서의개념이없음 L = n ( item0, item1,..., item -1) l 리스트의예 l 요일 : ( 일요일, 월요일,, 토요일 ) l 한글자음의모임 : ( ㄱ, ㄴ

Microsoft PowerPoint - 제9장-트리의응용.pptx

06장.리스트

Lab 4. 실습문제 (Circular singly linked list)_해답.hwp

Lab 3. 실습문제 (Single linked list)_해답.hwp

5.스택(강의자료).key

11장 포인터

1장. 리스트

Microsoft PowerPoint - 자료구조2008Chap07

슬라이드 1

슬라이드 1

11강-힙정렬.ppt

chap01_time_complexity.key

Chap 6: Graphs

<4D F736F F F696E74202D20C1A637C0E52DB0EDB1DEBFACB0E1B8AEBDBAC6AE2E >

03_queue

chap x: G입력

이번장에서학습할내용 동적메모리란? malloc() 와 calloc() 연결리스트 파일을이용하면보다많은데이터를유용하고지속적으로사용및관리할수있습니다. 2

원형연결리스트에대한설명중틀린것은 모든노드들이연결되어있다 마지막에삽입하기가간단한다 헤더노드를가질수있다 최종노드포인터가 NULL이다 리스트의 번째요소를가장빠르게찾을수있는구현방법은무엇인가 배열 단순연결리스트 원형연결리스트 이중연결리스트 단순연결리스트의노드포인터 가마지막노드를

08장.트리

K&R2 Reference Manual 번역본

Microsoft PowerPoint - 알고리즘_5주차_1차시.pptx

슬라이드 1

Chap 6: Graphs

정의 이진탐색트리 이진탐색트리 (BST: binary search tree) 는각각의노드가 BST 특성을만족하는키 - 주소쌍을가지고있는이진트리 BST 특성 트리에있는각각의키에대해, 왼쪽서브트리에있는모든키는이것보다작고, 오른쪽서브트리에있는모든키는이것보다큼 < > 2

Microsoft PowerPoint - 제8장-트리.pptx


Lab 5. 실습문제 (Double linked list)-1_해답.hwp

03장.스택.key

Microsoft PowerPoint - chap10_tree

Let G = (V, E) be a connected, undirected graph with a real-valued weight function w defined on E. Let A be a set of E, possibly empty, that is includ

Chap 6: Graphs

슬라이드 1

untitled

슬라이드 1

Algorithms

e-비즈니스 전략 수립

Microsoft PowerPoint - 자료구조2008Chap06

PowerPoint 프레젠테이션

슬라이드 1

Microsoft PowerPoint - ch07 - 포인터 pm0415

Contents v 학습목표 자료구조큐에대한개념을스택과비교하여이해한다. 큐의특징과연산방법에대해알아본다. 순차표현방법을이용한큐와연결표현방법을이용한큐를구현해본다. 큐의응용방법을알아본다. v 내용 큐 큐의구현 큐의응용 2/74

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CBED0C3E0C7C1B7CEB1D7B7A55C D616E2E637070>

슬라이드 1

2002년 2학기 자료구조

6주차.key

05_tree

Ch.1 Introduction

<4D F736F F F696E74202D20C1A63132B0AD20B5BFC0FB20B8DEB8F0B8AEC7D2B4E7>

Microsoft PowerPoint - lec07_tree [호환 모드]

중간고사 (자료 구조)

<322EBCF8C8AF28BFACBDC0B9AEC1A6292E687770>

11장 포인터

(Microsoft Word - \301\337\260\243\260\355\273\347.docx)

슬라이드 1

입학사정관제도

10주차.key

슬라이드 1

<4D F736F F F696E74202D20C1A63137C0E520B5BFC0FBB8DEB8F0B8AEBFCD20BFACB0E1B8AEBDBAC6AE>

Frama-C/JESSIS 사용법 소개

1. 리스트개념 리스트 (list) 고정된길이의자료 ( 원소 ) 들을순차적으로나열해놓은집합을가르키는자료구조의추상적인개념 순서를가진항목들의모임 집합 (set) : 항목간의순서의개념이없음 리스트의예 요일 : ( 일요일, 월요일,, 토요일 ) 한글자음의모임 : (ᄀ,ᄂ,,ᄒ

제 11 장포인터 유준범 (JUNBEOM YOO) Ver 본강의자료는생능출판사의 PPT 강의자료 를기반으로제작되었습니다.

Microsoft PowerPoint - chap-11.pptx

chap x: G입력

리스트연산, 검색 + 삽입 + 삭제 새로운항목을리스트의처음, 중간, 끝에추가. 기존의항목을리스트의임의의위치에서삭제. 모든항목을삭제. 기존항목을대치 (replace). 리스트가특정항목을가지고있는지를검색 (search). 리스트의특정위치의항목을반환. 리스트안의항목의개수를센

슬라이드 1

untitled

6장정렬알고리즘.key

ABC 10장

A Dynamic Grid Services Deployment Mechanism for On-Demand Resource Provisioning

리스트구현방법 배열 (array) 을이용하는방법 구현이간단 삽입, 삭제동작에따른원소이동. 항목의개수제한, 정적기억공간할당. 메모리낭비, 오버플로우 연결리스트 (linked list) 를이용하는방법 구현이복잡 삽입, 삭제가효율적 크기가제한되지않음 Lecture 03_Li

o 스택 (stack) ~ 쌓아놓은더미 1. 스택의개요 - 2 -

PowerPoint 프레젠테이션

서강대학교공과대학컴퓨터공학과 CSE3081 알고리즘설계와분석 (2 반 ) 기말고사 (2015 년 12 월 17 일 ) 알고리즘설계와분석 (CSE3081(2 반 )) 기말고사 (2015년 12월17일 ( 목 ) 오전 9시 30분 ) 담당교수 : 서강대학교컴퓨터공학과임인성

CompareAndSet(CAS) 함수는 address 주소의값이 oldvalue 인지비교해서같으면 newvalue 로 바꾼다. 소프트웨어 lock 을사용하는것이아니고, 하드웨어에서제공하는기능이므로더빠르고 간편하다. X86 에서는 _InterlockedCompareEx

09J1_ _R.hwp

chap8.PDF

Microsoft PowerPoint - chap4_list

PowerPoint 프레젠테이션

Microsoft PowerPoint - 07-chap05-Stack.ppt

<443A5C4C C4B48555C B3E25C32C7D0B1E25CBCB3B0E8C7C1B7CEC1A7C6AE425CC0E7B0EDB0FCB8AE5C53746F636B5F4D616E D656E74732E637070>

Transcription:

5. Threaded Binary Tree 기본개념 n 개의노드를갖는이진트리에는 2n 개의링크가존재 2n 개의링크중에 n + 1 개의링크값은 null Null 링크를다른노드에대한포인터로대체 Threads Thread 의이용 ptr left_child = NULL 일경우, ptr left_child 를 ptr 의 inorder predecessor 를가리키도록변경 ptr right_child = NULL 일경우, ptr right_child 를 ptr 의 inorder successor 를가리키도록변경 5 장. 트리 (Page 36)

노드의구조 struct thread_tree { short int left_thread; // true or false struct thread_tree *left_child; // left_thread = true: thread // left_thread = false: left child char data; struct thread_tree *right_child; // right_thread에따라결정 short int right_thread; // true or false }; root A thread child B C D E F G H I 5 장. 트리 (Page 37)

Threaded Binary Tree 의 Head Node Head Node 의역할 가장왼쪽노드의 inorder predecessor 가장오른쪽노드의 inorder successor An Empty Threaded Binary Tree left_thread left_child data right_child right_thread TRUE FALSE 5 장. 트리 (Page 38)

Threaded Binary Tree 의예 root f - f f A f f B f f C f f D f t E t t F t t G t t H t t I t f = FALSE t = TRUE 5 장. 트리 (Page 39)

Threaded Binary Tree 에서 Inorder Traversal ptr 이현재노드를가리킨다고가정 If ptr right_thread == TRUE Inorder successor of ptr = ptr right_child Otherwise ptr 의 right_child 로간다음, left_child 를따라계속내려간다. 언제까지? left_thread == TRUE 인노드를만날때까지 Program 5.10 & Program 5.11: Complexity = O(n) Exercise 4/5: preorder/postorder traversal with threads 5 장. 트리 (Page 40)

Program 5.10: 한노드의 inorder successor 발견 struct thread_tree *insucc(struct thread_tree *ptr) { /* Threaded binary tree 에서 ptr 이가리키는노드의 inorder successor 를 return */ struct thread_tree *temp = ptr right_child; } if (!ptr right_thread) // right_child 가 child pointer while (!temp left_thread) // 왼쪽끝까지가자 temp = temp left_child; return temp; 5 장. 트리 (Page 41)

Program 5.11: Inorder Traversal void tinorder (struct thread_tree *tree) { // Threaded binary tree 를 inorder traversal struct thread_tree *temp = tree; } for ( ; ; ) { temp = insucc(temp); if (temp == tree) break; printf("%3c", temp data); 5 장. 트리 (Page 42)

Threaded Binary Tree 에서노드추가 문제정의 새로운노드를 parent 노드의 right child 로추가 parent right_thread 값이 true/false 일경우고려 그림 5.24 와 Program 5.12 root root A A parent B parent B C D child C D child before after 그림 5.24: 첫번째경우 (parent right_thread == TRUE) 5 장. 트리 (Page 43)

그림 5.24: parent right_thread == FALSE root root A parent A parent B B child C D C X E F D child X E F before after 5 장. 트리 (Page 44)

Program 5.12: Parent 의오른쪽에추가 void insert_right(struct thread_tree *parent, struct thread_tree *child) { // Threaded binary tree 에서 parent 의오른쪽에 child 추가 struct thread_tree *temp; child right_child = parent right_child; // child의 child right_thread = parent right_thread; // 정보부터 child left_child = parent; // 변경 child left_thread = TRUE; // 하자. parent right_child = child; parent right_thread = FALSE; // child가존재하므로 thread는 false if (!child right_thread) { temp = insucc(child); // parent의원래 successor를찾아서 temp left_child = child; // 새로운 predecessor로변경 } } Exercise 3: Insert a new node as a left child of a parent? 5 장. 트리 (Page 45)

6. Heaps Heap 의정의 우선순위큐 (Priority Queues) Max Heap 에노드추가 Max Heap 에서노드삭제 5 장. 트리 (Page 46)

6.1 Heap 의정의 Max tree 와 max heap 의정의 Max tree: key value of a node key values of its children Max heap: Max tree 이면서 complete binary tree Min tree 와 min heap 의정의 Min tree: key value of a node key values of its children Min heap: Min tree 이면서 complete binary tree 5 장. 트리 (Page 47)

Max Heap 과 Min Heap 의예 14 9 30 [2] 12 [3] 7 [2] 6 [3] 3 [2] 25 10 8 [6] 6 [4] [5] [4] 5 Max Heap 2 10 11 [2] 7 [3] 4 [2] 20 [3] 83 [2] 21 10 8 [6] 6 [4] [5] [4] 50 Min Heap 5 장. 트리 (Page 48)

ADT 5.2: MaxHeap ADT ADT MaxHeap 객체 : 각노드의값이 children 의것들보다작지않도록조직된 n > 0 인노드들의 complete binary tree 함수 : for all heap MaxHeap, item Element, n, max_size integer MaxHeap Create(max_size) ::= 최대 max_size 만큼의노드를저장할수있는 empty heap 을생성 Boolean HeapFull(heap, n) ::= if (n == max_size) return TRUE else return FALSE MaxHeap Insert(heap, item, n) ::= if (!HeapFull(heap, n)) item 을 heap 에저장한후, heap return. else return error. Boolean HeapEmpty(heap, n) ::= if (n > 0) return FALSE else return TRUE Element Delete(heap, n) ::= if (!HeapEmpty(heap, n)) heap 에서가장큰값을갖는원소를삭제한후그값을 return. else return error 5 장. 트리 (Page 49)

6.2 우선순위큐 (Priority Queues) Priority queue의정의 우선순위의순서대로삭제되는큐 Priority Queue의구현방법비교 Representation Insertion Deletion Unordered array Θ(1) Θ(n) Unordered linked list Θ(1) Θ(n) Sorted array O(n) Θ(1) Sorted linked list O(n) Θ(1) Max heap O(log 2 n) O(log 2 n) 5 장. 트리 (Page 50)

6.3 Max Heap 에노드추가 Max heap 은배열로구현 ( 왜?) 배열의끝에새로운노드추가 추가된위치의 parent 부터 root 노드까지기존노드들의값과비교하면서 max heap 을재구성 C 언어를이용한자료구조선언 #define MAX_ELEMENTS 200 // maximum heap size+1 #define HEAP_FULL(n) (n == MAX_ELEMENTS-1) #define HEAP_EMPTY(n) (!n) typedef struct { int key; /* other fields */ } element; element heap[max_elements]; int n = 0; 그림 5.28 & Program 5.13: Complexity = O(log 2 n) 5 장. 트리 (Page 51)

그림 5.28: Max Heap 에삽입의예 20 20 [2] 15 [3] 2 [2] 15 [3] 2 [6] [4] 14 [5] 10 [4] 14 [5] 10 (a) heap before insertion (b) Initial location of new node 20 21 [2] 15 [3] 5 [2] 15 [3] 20 [6] [6] [4] 14 [5] 10 2 [4] 14 [5] 10 2 (c) Insert 5 into heap (a) (d) Insert 21 into heap (a) 5 장. 트리 (Page 52)

Program 5.13: insert_max_heap() void insert_max_heap(element item, int *n) { // 노드수가 *n 인 max heap 에 item 값을추가 int i; if (HEAP_FULL(*n)) { fprintf(stderr, "The heap is full. \ n"); exit(1); } i = ++(*n); while ((i!= 1) && (item.key > heap[i/2].key)) { } heap[i] = heap[i/2]; // parent의값을아래로이동 i /= 2; // 한레벨위로이동 } heap[i] = item; 5 장. 트리 (Page 53)