Trees 1: introduction to Binary Trees & Heaps. trees 1

Similar documents
Chapter 9. Priority Queue

Programming II (CS300)

Priority Queues and Heaps. Heaps of fun, for everyone!

Heaps. Heaps Priority Queue Revisit HeapSort

Priority Queues, Binary Heaps, and Heapsort

CMPSCI 187: Programming With Data Structures. Lecture #34: Efficient Sorting Algorithms David Mix Barrington 3 December 2012

Chapter 10 Sorting and Searching Algorithms

Computer Science 210 Data Structures Siena College Fall Topic Notes: Priority Queues and Heaps

Sorting. Two types of sort internal - all done in memory external - secondary storage may be used

Priority Queues and Binary Heaps. See Chapter 21 of the text, pages

The smallest element is the first one removed. (You could also define a largest-first-out priority queue)

Priority Queues and Binary Heaps. See Chapter 21 of the text, pages

Overview of Presentation. Heapsort. Heap Properties. What is Heap? Building a Heap. Two Basic Procedure on Heap

A set of nodes (or vertices) with a single starting point

Topics for CSCI 151 Final Exam Wednesday, May 10

CS165: Priority Queues, Heaps

Priority Queues. e.g. jobs sent to a printer, Operating system job scheduler in a multi-user environment. Simulation environments

Heaps and Priority Queues

Binary Trees, Binary Search Trees

University of Waterloo CS240, Winter 2010 Assignment 2

CH 8. HEAPS AND PRIORITY QUEUES

CMSC 341 Lecture 14: Priority Queues, Heaps

CS102 Binary Search Trees

Lecture 13: AVL Trees and Binary Heaps

Binary Trees

Sorting and Searching

Tables and Priority Queues

CS2223: Algorithms Sorting Algorithms, Heap Sort, Linear-time sort, Median and Order Statistics

CSC Design and Analysis of Algorithms. Lecture 8. Transform and Conquer II Algorithm Design Technique. Transform and Conquer

Data Structures and Algorithms

COMP 250 Fall priority queues, heaps 1 Nov. 9, 2018

Chapter 20: Binary Trees

Heapsort. Why study Heapsort?

Tables, Priority Queues, Heaps

Sorting and Searching

Programming II (CS300)

Heaps & Priority Queues. (Walls & Mirrors - Remainder of Chapter 11)

Priority Queues (Heaps)

3. Priority Queues. ADT Stack : LIFO. ADT Queue : FIFO. ADT Priority Queue : pick the element with the lowest (or highest) priority.

Basic Data Structures (Version 7) Name:

CMSC 341 Lecture 15 Leftist Heaps

Definition of a Heap. Heaps. Priority Queues. Example. Implementation using a heap. Heap ADT

How much space does this routine use in the worst case for a given n? public static void use_space(int n) { int b; int [] A;

Sorting. Task Description. Selection Sort. Should we worry about speed?

CSE 214 Computer Science II Heaps and Priority Queues

CMSC 341 Leftist Heaps

Priority Queues and Binary Heaps

CE 221 Data Structures and Algorithms

Module 2: Priority Queues

Sorting. Chapter 12. Exercises

Module 2: Priority Queues

CS350: Data Structures Heaps and Priority Queues

Section 1: True / False (1 point each, 15 pts total)

Heaps, Heap Sort, and Priority Queues.

CH. 8 PRIORITY QUEUES AND HEAPS

Trees 2: Linked Representation, Tree Traversal, and Binary Search Trees

Data Structures and Algorithms for Engineers

CSC Design and Analysis of Algorithms. Lecture 8. Transform and Conquer II Algorithm Design Technique. Transform and Conquer

ECE 242 Data Structures and Algorithms. Heaps I. Lecture 22. Prof. Eric Polizzi

ADT Priority Queue. Heaps. A Heap Implementation of the ADT Priority Queue. Heapsort

1) What is the primary purpose of template functions? 2) Suppose bag is a template class, what is the syntax for declaring a bag b of integers?

Lecture Notes on Priority Queues

CSCI2100B Data Structures Heaps

MID TERM MEGA FILE SOLVED BY VU HELPER Which one of the following statement is NOT correct.

Trees (Part 1, Theoretical) CSE 2320 Algorithms and Data Structures University of Texas at Arlington

CSE 332 Autumn 2013: Midterm Exam (closed book, closed notes, no calculators)

Computational Optimization ISE 407. Lecture 16. Dr. Ted Ralphs

CS 240 Data Structures and Data Management. Module 2: Priority Queues

Binary Trees and Binary Search Trees

CSCI 136 Data Structures & Advanced Programming. Lecture 22 Fall 2018 Instructor: Bills

CS 240 Data Structures and Data Management. Module 2: Priority Queues

Priority Queues. Lecture15: Heaps. Priority Queue ADT. Sequence based Priority Queue

CMSC 341 Lecture 15 Leftist Heaps

The beautiful binary heap.

Heaps and Priority Queues

Binary Trees. Directed, Rooted Tree. Terminology. Trees. Binary Trees. Possible Implementation 4/18/2013

COS 226 Midterm Exam, Spring 2009

! Tree: set of nodes and directed edges. ! Parent: source node of directed edge. ! Child: terminal node of directed edge

Sorting. Order in the court! sorting 1

9. Heap : Priority Queue

Figure 1: A complete binary tree.

Algorithms and Data Structures

Heaps. Heaps. A heap is a complete binary tree.

SOLUTIONS. COMP103 Introduction to Data Structures and Algorithms

CS 2412 Data Structures. Chapter 7 Heaps

DO NOT. UNIVERSITY OF CALIFORNIA Department of Electrical Engineering and Computer Sciences Computer Science Division. P. N.

Sorting. Order in the court! sorting 1

Trees & Tree-Based Data Structures. Part 4: Heaps. Definition. Example. Properties. Example Min-Heap. Definition

Priority queues. Priority queues. Priority queue operations

Principles of Computer Science

binary tree empty root subtrees Node Children Edge Parent Ancestor Descendant Path Depth Height Level Leaf Node Internal Node Subtree

COMP : Trees. COMP20012 Trees 219

Module 2: Priority Queues

CS106X Programming Abstractions in C++ Dr. Cynthia Bailey Lee

Priority Queues. 1 Introduction. 2 Naïve Implementations. CSci 335 Software Design and Analysis III Chapter 6 Priority Queues. Prof.

CMSC 341 Priority Queues & Heaps. Based on slides from previous iterations of this course

Another solution: B-trees

Chapter 7 Sorting. Terminology. Selection Sort

Lecture 7. Transform-and-Conquer

Trees, Binary Trees, and Binary Search Trees

Transcription:

Trees 1: introduction to Binary Trees & Heaps trees 1

Basic terminology Finite set of nodes (may be empty -- 0 nodes), which contain data First node in tree is called the root trees 2

Basic terminology Each node may be linked to 0, 1 or 2 child nodes (or children) A node with children is a parent; a node with no children is a leaf Nodes d and e are children of b Node c is parent of f and g trees 3

More botany & sociology The root node has no parent; it is the ancestor of all other nodes All nodes in the tree are descendants of the root node Nodes with the same parent are siblings Any node with descendants (any parent node) is the root node of a subtree trees 4

But wait, there s more! Tree depth is the maximum number of steps through ancestor nodes from the deepest leaf back to root tree with single node (root) has depth of 0 empty tree has depth of -1 Depth of entire tree is 2; depth of b s subtree is 1; depth of f s subtree is 0 trees 5

Tree shape terminology Full binary tree every parent has 2 children, every leaf has equal depth trees 6

Tree shape terminology Complete binary tree every level is full except possibly the deepest level if the deepest level isn t full, leaf nodes are as far to the left as possible trees 7

Some examples Complete binary tree Neither Full and complete Both Complete Neither full nor complete trees 8

Array representation of a binary tree Complete binary tree is easily represented as an array Root data is stored at index 0 Root s children are stored at index 1 and 2 A B C A B C trees 9

Array representation of a binary tree In general: root is tree[0] for any node at tree[n], the parent node will be found at index (n-1)/2 for any node at tree[n], the children of n (if any) will be found at tree[2n + 1] and tree[2n + 2] trees 10

Array representation of a binary tree Since these formulas apply to any complete tree represented as an array, can create a tree class with 2 private members: an array that stores the data a counter to keep track of the number of nodes in the tree Relationships between nodes can always be determined from the given formulas trees 11

Array representation of a binary tree What if tree isn t complete? Can still use array, but problem is more complicated -- have to keep track of which children actually exist One possibility would be to place a known dummy value in empty slots Another is to add another private member to the class -- an array of bools paired to the data array -- index value is true if data exists, false if not trees 12

Heap A heap is a binary tree in which the data entries can be compared using total order semantics Defining qualities of a heap: the data entry contained in any node is greater than or equal to the data entry contained in either of its children the tree is always complete heaps 13

Heap Example 45 32 41 19 7 28 40 10 12 heaps 14

Heap Applications Heap can be used to implement a sorting algorithm called heapsort Heap is also a handy way to implement a priority queue -- we ll use this application to illustrate how heaps work heaps 15

Heap Implementation Because a heap is by definition a complete tree, it is easy to use an array-based implementation Heap operations reheapup and reheapdown are used to maintain the other defining quality of a heap -- each node s data entry >= data entries of its children heaps 16

ReHeapUp operation When a new node is added to the tree, it is always added at the leftmost open position in the bottom row 45 32 41 19 7 28 40 10 12 35 This maintains completeness of tree, but can violate the other defining characteristic of a heap heaps 17

ReHeapUp restores the second heap condition: a parent node s data is always greater than or equal to the data in either of its child nodes ReHeapUp operation 45 32 35 41 19 35 32 7 28 40 10 12 35 7 Parent/child data swapping continues until the heap condition is restored The operation is accomplished by swapping the new node s data entry with that of its parent heaps 18

ReHeapDown operation In a priority queue, the highest-priority item is always dequeued first -- this item would be the top item of the heap 45 7 32 35 41 19 35 32 7 28 40 10 12 35 45 7 Since this is going to be an array implementation, we ll perform the usual trick of swapping the last array entry with the first, so we can minimize the amount of copying to be done heaps 19

ReHeapDown operation Now we can effectively remove the item by simply diminishing the used portion of our array by 1 (already done here) 45 41 7 32 35 41 40 7 19 35 32 7 28 40 7 10 12 We are once again faced with the same problem -- the heap is the right shape, but the data values are in the wrong positions We solve this problem, as before, by swapping data between nodes. In this case, we swap the parent node s data with the largest data entry of the two children, continuing until the heap is restored. heaps 20

Example: Priority Queue with heap implementation Priority queue has all operations associated with a queue: enqueue, dequeue and helper functions Heap is a good fit for priority queue because highest-priority item should always be dequeued first, and this item would always be found at the top of a heap heaps 21

Code for Priority Queue public class PQueue { Heap queue; public PQueue (int cap) { queue = new Heap(cap); } public void enqueue (int item) { queue.addentry(item); } } public int dequeue () { return queue.gettop(); heaps 22

Code for Heap class public class Heap { int [] data; int numitems; public Heap (int size) { numitems = 0; data = new int [size]; } heaps 23

Code for Heap class public int parent (int n) { return (n-1)/2; } public int leftchild (int n) { return 2*n + 1; } public int rightchild (int n) { return 2*n + 2; } heaps 24

Code for Heap class public void addentry (int entry) { if (numitems < data.length) { data[numitems] = entry; reheapup(numitems); numitems++; } } heaps 25

Code for Heap class public void reheapup(int n) { int x = n; while (x>0 && data[x] > data[parent(x)]) { int tmp = data[x]; data[x] = data[parent(x)]; data[parent(x)] = tmp; x=parent(x); } } heaps 26

Code for Heap class public int gettop () { int value=data[0]; // save return value numitems--; data[0]=data[numitems]; // swap top & bottom reheapdown(numitems); // restore heap return value; } heaps 27

Code for Heap class public void reheapdown (int n) { int current = 0, bigchild; boolean heapok = false; while ((!heapok) && (leftchild(current) < n)) { if (rightchild(current) >= n) bigchild = leftchild(current); else if (data[leftchild(current)] > data[rightchild(current)]) bigchild = leftchild(current); // continued next slide heaps 28

Code for Heap class else bigchild = rightchild(current); if (data[current] < data[bigchild]) { int tmp = data[current]; data[current] = data[bigchild]; data[bigchild] = tmp; current = bigchild; } else heapok = true; } // end of while loop } // end of method }// end of class heaps 29

A good sorting algorithm is hard to find... Quadratic sorting algorithms (with running times of O(N 2 ), such as Selectionsort & Insertionsort are unacceptable for sorting large data sets Mergesort and Quicksort are both better alternatives, but each has its own set of problems sorting3 30

A good sorting algorithm is hard to find... Both Mergesort and Quicksort have average running times of O(N log N), but: Quicksort s worst-case running time is quadratic Mergesort uses dynamic memory and may fail for large data sets because not enough memory is available to complete the sort sorting3 31

Heapsort to the rescue! Combines the time efficiency of Mergesort with the storage efficiency of Quicksort Uses an element interchange algorithm similar to Selectionsort Works by transforming the array to be sorted into a heap sorting3 32

How Heapsort Works Begin with an array of values to be sorted Heapsort algorithm treats the array as if it were a complete binary tree Values are rearranged so that the other heap condition is met: each parent node is greater than or equal to its children sorting3 33

Heapsort in Action 42 19 33 8 12 97 54 85 29 60 26 71 Original array 42 19 33 8 12 97 54 85 29 60 26 71 arranged as binary tree (but not yet heap) sorting3 34

Heapsort in Action 97 85 71 29 60 42 54 8 19 12 26 33 85 97 71 29 60 42 54 8 19 12 26 33 rearranged as heap sorting3 35

Heapsort in Action The goal of the sort algorithm is to arrange entries in order, smallest to largest. Since the root element is by definition the largest element in a heap, that largest element can be placed in its final position by simply swapping it with whatever element happens to be in the last position: 33 97 As a result, the shaded area can now be designated the sorted side of the array, and the unsorted side is almost, but not quite, a heap. sorting3 36

Heapsort in Action The next step is to restore the heap condition by rearranging the nodes again; the root value is swapped with its largest child, and may be swapped further down until the heap condition is restored: 85 33 60 33 Once the heap is restored, the previous operation is then repeated: the root value, which is the largest on the unsorted side, is swapped with the last value on the unsorted side: 26 85 sorting3 37

Heapsort in Action Again, the unsorted side is almost a heap, and must be restored to heap condition - this is accomplished the same way as before: 71 26 54 26 The process continues: root is swapped with the last value and marked sorted; the unsorted portion is restored to heap condition 12 60 12 33 12 19 12 71 sorting3 38

And so on... Heapsort in Action 12 54 12 42 12 60 And so forth... 42 8 26 8 8 54 Etc.... 29 26 19 12 33 8 29 19 12 8 12 19 26 8 12 29 33 42 Tada! sorting3 39

Pseudocode for Heapsort Convert array of n elements into heap Set index of unsorted to n (unsorted = n) while (unsorted > 1) unsorted--; swap (array[0], array[unsorted]); reheapdown sorting3 40

makeheap function Two common ways to build initial heap First method builds heap one element at a time, starting at front of array Uses reheapup process (last seen in priority queue implementation) to enforce heap condition - children are <= parents sorting3 41

Alternative makeheap method Uses a function (subheap) that creates a heap from a subtree of the complete binary tree The function takes three arguments: an array of items to be sorted, the size of the array(n), and a number representing the index of a subtree. Function subheap is called within a loop in the makeheap function, as follows: for (int x = (n/2); x>0; x--) subheap(data, x-1, n); sorting3 42

Alternative makeheap in Action 42 19 33 8 12 97 54 85 29 60 26 71 Original array First call to subheap, in the given example: subheap (data, 5, 12); Algorithm examines subtree to determine if any change is necessary; since the only child of element 5 (97) is element 11(71), no change from this call. sorting3 43

Second call to subheap 42 19 33 8 60 12 97 54 85 29 12 60 26 71 The second call to subheap looks at the subtree with root index 4 The children of this node are found at indexes 9 and 10 Both children are greater than the root node, so the root node s data entry is swapped with the data entry of the larger child sorting3 44

Third call to subheap 42 19 33 85 8 60 97 54 85 8 29 12 26 71 Continuing to work backward through the array, the next root index is 3 Again, the children of this node are examined, and the root data entry is swapped with the larger of its two children sorting3 45

The process continues... 42 19 97 33 85 60 33 71 97 54 8 29 12 26 33 71 In this case, a further swap is necessary because the data entry s new position has a child with a larger data entry sorting3 46

The process continues... 42 85 19 97 19 29 85 60 71 54 8 19 29 12 26 33 Again, a further swap operation is necessary sorting3 47

Last call to subheap 97 42 85 42 71 97 29 60 71 42 54 8 19 12 26 33 We now have a heap: sorting3 48

ReHeapDown function Both the original HeapSort function and the subheap function will call reheapdown to rearrange the array The reheapdown method swaps an out-ofplace data entry with the larger of its children sorting3 49

Time analysis for HeapSort The time required for a HeapSort is the sum of the time required for the major operations: building the initial heap: O(N log N) removing items from the heap: O(N log N) So total time required is O(2N log N), but since constants don t count, the worst-case (and average case) for HeapSort is O(N log N) sorting3 50