Title: CSCE 3100 Data Structures and Algorithm Analysis
1CSCE 3100Data Structures and Algorithm Analysis
- Heaps
- Reading Chap.6 Weiss
2Heaps
- A heap is a binary tree T that stores a
key-element pairs at its internal nodes - It satisfies two properties
- MinHeap key(parent) ? key(child)
- OR MaxHeap key(parent) gt key(child)
- all levels are full, except
- the last one, which is
- left-filled
3What are Heaps Useful for?
- To implement priority queues
- Priority queue a queue where all elements have
a priority associated with them - Remove in a priority queue removes the element
with the smallest priority - insert
- removeMin
4Heap or Not a Heap?
5Heap Properties
- A heap T storing n keys has height h ?log(n
1)?, which is O(log n)
6ADT for Min Heap
objects n gt 0 elements organized in a binary
tree so that the value in each node is at least
as large as those in its children method
Heap Create(MAX_SIZE) create an empty heap
that can hold a
maximum of max_size elements Boolean
HeapFull(heap, n) if (nmax_size) return
TRUE
else return FALSE Heap Insert(heap, item,
n) if (!HeapFull(heap,n)) insert
item into heap and return the
resulting heap
else return error Boolean
HeapEmpty(heap, n) if (ngt0) return FALSE
else return TRUE Element Delete(heap,n) if
(!HeapEmpty(heap,n)) return one
instance of the smallest element in
the heap and
remove it from the heap
else return error
7Heap Insertion
8Heap Insertion
- Add key in next available position
9Heap Insertion
10Heap Insertion
11Heap Insertion
- Terminate unheap when
- reach root
- key child is greater than key parent
12Heap Removal
- Remove element
- from priority queues?
- removeMin( )
13Heap Removal
14Heap Removal
15Heap Removal
16Heap Removal
- Terminate downheap when
- reach leaf level
- key child is greater than key parent
17Bottom-up Heap Construction
- We can construct a heap storing n given keys
using a bottom-up construction with log n phases - In phase i, pairs of heaps with 2i -1 keys are
merged into heaps with 2i1-1 keys
2i1-1
18Merging Two Heaps
- We are given two two heaps and a key k
- We create a new heap with the root node storing k
and with the two heaps as subtrees - We perform heapDown to restore the heap-order
property
7
3
2
5
8
6
4
2
3
4
5
8
6
7
19Merging Example
Insert 16, 15, 4, 12, 6, 9, 23, 20
Insert 25, 5, 11, 27
20Example (contd.)
heapDown
21Example (contd.)
Insert 7, 8
heapDown
22Example (end)
Insert 10
heapDown
23Bottom up Heap Construction
16
4
15
12
6
7
23
20
25
5
11
27
9
8
14
24Bottom up Heap Construction
25Bottom up Heap Construction
26Bottom up Heap Construction
27Bottom up Heap Construction
28Bottom up Heap Construction
29Bottom up Heap Construction
30Bottom up Heap Construction
31Heap Implementation
- Using arrays
- Parent k Children 2k , 2k1
- Why is it efficient?
4
32Insertion into a Heap
void insertHeap(element item, int n) int i
if (HEAP_FULL(n)) fprintf(stderr, the
heap is full.\n) exit(1) i
(n) while ((i!1)(item.keyltheapi/2.key))
heapi heapi/2 i / 2
heapi item
2k-1n gt k?log2(n1)?
O(log2n)
33Deletion from a Heap
element deleteHeap(int n) int parent,
child element item, temp if
(HEAP_EMPTY(n)) fprintf(stderr, The heap
is empty\n) exit(1) / save value of
the element with the highest key / item
heap1 / use last element in heap to adjust
heap / temp heap(n)-- parent 1
child 2
34Deletion from a Heap (contd)
while (child lt n) / find the smaller
child of the current parent / if
((child lt n) (heapchild.keygtheapchil
d1.key)) child if (temp.key lt
heapchild.key) break / move to the next
lower level / heapparent heapchild
parent child child 2
heapparent temp return item
35Heap Sorting
- Step 1 Build a heap
- Step 2 removeMin( )
- Running time?