Top Banner
Sorting Dr. Yingwu Zhu
27

Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Jan 02, 2016

Download

Documents

Beatrice Booker
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Sorting

Dr. Yingwu Zhu

Page 2: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Heaps

A heap is a binary tree with properties:

1. It is complete• Each level of tree completely filled• Except possibly bottom level (nodes

in left most positions)

2. It satisfies heap-order property• Data in each node >= data in children

Page 3: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Heaps

Which of the following are heaps?

A B C

Page 4: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Heaps

Maxheap?– by default Minheap?

Page 5: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Implementing a Heap

What data structure is good for its implementation?

Page 6: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Implementing a Heap Use an array or vector, why? Number the nodes from top to bottom

Number nodes on each row from left to right Store data in ith node in ith location of array

(vector)

Page 7: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Implementing a Heap Note the placement of the nodes in the

array

Page 8: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Implementing a Heap In an array implementation children of ith

node are at myArray[2*i] and myArray[2*i+1]

Parent of the ith node is at mayArray[i/2] How about in C++, position starting from 0?

Page 9: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Basic Heap Operations Constructor

Set mySize to 0, allocate array Empty

Check value of mySize Retrieve max item

Return root of the binary tree, myArray[1]

Page 10: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Basic Heap Operations Delete max item

Max item is the root, replace with last node in tree

Then interchange root with larger of two children Continue this with the resulting sub-tree(s) Semiheap: [1] complete [2] both subtrees are

heaps

Result called a semiheap

Result called a semiheap

Page 11: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Implementing Heap#define CAP 10000template <typename T>class Heap {

private: T myArray[CAP];

int mySize; private: void percolate_down(int pos); //percolate down void percolate_up(int pos); //percolate up public:

Heap():mySize(0) {} ~Heap();

void deleteMax(); //remove the max element void insert(const T& item); //insert an item …};

Page 12: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Percolate Down Algorithm

1. Set c = 2 * r + 12. While c < n do following //what does this mean?

a. If c < n-1 and myArray[c] < myArray[c + 1]Increment c by 1

b. If myArray[r] < myArray[c]i. Swap myArray[r] and myArray[c]ii. set r = ciii. Set c = 2 * c + 1

else Terminate repetitionEnd while

Page 13: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Basic Heap Operations Insert an item

Amounts to a percolate up routine Place new item at end of array

Interchange with parent so long as it is greater than its parent

Page 14: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Percolate Up Algorithm

Why percolate up? When to terminate the up process?

void Heap<T>::percolate_up() void Heap<T>::insert(const T&

item)

Page 15: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

How to do remove?

Remove an item from the heap? Question: A leaf node must be less

or equal than any internal node in a heap?

Page 16: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Heapsort Given a list of numbers in an array

Stored in a complete binary tree

Convert to a heap Begin at last node not a leaf: pos =

(size-2)/2? Apply percolated down to this subtree Continue

Page 17: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Heapsort

Algorithm for converting a complete binary tree to a heap – called "heapify"For r = (n-1-1)/2 down to 0:

apply percolate_down to the subtreein myArray[r] , … myArray[n-1]

End for Puts largest element at root Do you understand it? Think why?

Page 18: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Heapsort

Why? Heap is a recursive ADT Semiheap heap: from bottom to up

Percolate down for this conversion

Page 19: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Heapsort Now swap element 1 (root of tree) with last

element

This puts largest element in correct location Use percolate down on remaining sublist

Converts from semi-heap to heap

Page 20: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Heapsort

Again swap root with rightmost leaf

Continue this process with shrinking sublist

Page 21: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Summary of HeapSort

Step 1: put the data items into an array Step 2: Heapify this array into a heap Step 3: Exchange the root node with the

last element and shrink the list by pruning the last element. Now it is a semi-heap Apply percolate-down algorithm Go back step 3

Page 22: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Heapsort Algorithm

1. Consider x as a complete binary tree, use heapify to convert this tree to a heap

2. for i = n-1 down to 1:a. Interchange x[0] and x[i] (puts largest element at end)b. Apply percolate_down to convert binary tree corresponding to sublist in x[0] .. x[i-1]

Page 23: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Heapsort

Fully understand how heapsort works!

T(n) = O(nlogn) Why?

Page 24: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Heap Algorithms in STL

Found in the <algorithm> library make_heap() heapify push_heap() insert pop_heap() delete sort_heap() heapsort

Note program which illustrates these operations, Fig. 13.1

Page 25: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Priority Queue A collection of data elements

Items stored in order by priority Higher priority items removed ahead of lower

Operations Constructor Insert Find, remove smallest/largest (priority) element Replace Change priority Delete an item Join two priority queues into a larger one

Page 26: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Priority Queue

Implementation possibilities As a list (array, vector, linked list)

T(n) for search, removeMax, insert operations

As an ordered list T(n) for search, removeMax, insert

operations Best is to use a heap

T(n) for basic operations Why?

Page 27: Sorting Dr. Yingwu Zhu. Heaps A heap is a binary tree with properties: 1. It is complete Each level of tree completely filled Except possibly bottom level.

Priority Queue

STL priority queue adapter uses heap Note operations in table of Fig. 13.2 in

text, page 751