Análisis y Diseño de Algoritmos (Algorítmica III) : - Heaps - Heap Sort - Priority Queues
Análisis y Diseño de Algoritmos (Algorítmica III) : - Heaps - Heap Sort - Priority Queues
3
Análisis y Diseño de
Algoritmos (Algorítmica III)
-Heaps-
-Heap Sort-
-Priority Queues-
Profesores:
Herminio Paucar.
Luis Guerra.
Special Types of Trees
4
• Def: Full binary tree = a binary
tree in which each node is 1 3
exactly 2. 14 8 7 12
Full binary tree
• Def: Complete binary tree = a
binary tree in which all leaves 4
are on the same level and all
internal nodes have degree 2. 1 3
2 16 9 10
4 Height of root= 3
1 3
Height of (2)= 1 Height of (10)= 0
2 16 9 10
Level of (10)= 2
14 8
Useful Properties
4 Height of root = 3
1 3
Height of (2)= 1 2 16 9 10 Level of (10)= 2
14 8
The Heap Data Structure
8
Heap From the heap property, it follows that:
“The root is the maximum element of
7 4 the heap!”
5 2
A[2] ↔ A[4]
A[2] violates the heap property A[4] violates the heap property
A[4] ↔ A[9]
• Intuitively:
– It traces a path from the root to a leaf (longest path h)
– At each level, it makes exactly 2 comparisons
– Total number of comparisons is 2h
– Running time is O(h) or O(lg n)
• Running time of MAX-HEAPIFY is O(lgn)
• Can be written in terms of the height of the heap, as being
O(h)
– Since the height of the heap is ⎣lg n⎦
Building a Heap
Alg: BUILD-MAX-HEAP(A) 1
4
n = length[A] 2 3
1 3
for i ← ⎣n/2⎦ to 1 do 4 5 6 7
2 16 9 10
MAX-HEAPIFY(A, i, n) 8 9 10
14 8 7
A: 4 1 3 2 16 9 10 14 8 7
Example: A= 4 1 3 2 16 9 10 14 8 7
1 3 1 3 1 3
4 5 6 7 4 5 6 7 4 5 6 7
8
2 9 10
16 9 10
8
2 9 10
16 9 10
8
14
9 10
16 9 10
14 8 7 14 8 7 2 8 7
i=2 i=1
1 1 1
4 4 16
2 3 2 3 2 3
1 10 16 10 14 10
4 5 6 7 4 5 6 7 4 5 6 7
8
14
9 10
16 9 3 8
14
9 10
7 9 3 8
8 9 10
7 9 3
2 8 7 2 8 1 2 4 1
Running Time of BUILD MAX HEAP
Alg: BUILD-MAX-HEAP(A)
n = length[A]
for i ← ⎣n/2⎦ to 1 do
O(n)
MAX-HEAPIFY(A, i, n) O(lgn)
h2 = 3-1 = 2 i=1 21
h1 = 3-2 = 1 i=2 22
h0 = 3-3 = 0 i = 3 (⎣lgn⎦) 23
Running Time of BUILD MAX HEAP
Change variables: k = h - i
• Goal:
Sort an array using heap representations
• Idea:
1. Build a max-heap from the array
2. Swap the root (the maximum element) with the last
element in the array
3. “Discard” this last node by decreasing the heap size
4. Call MAX-HEAPIFY on the new root
5. Repeat this process until only one node remains
Example: A=[7, 4, 3, 1, 2]
MAX-HEAPIFY(A, 1, 1)
Algoritmo Heapsort (A)
Alg: HEAPSORT(A)
BUILD-MAX-HEAP(A) O(n)
for i ← length[A] to 2 do
exchange (A[1] ↔ A[i]) n-1 times
MAX-HEAPIFY(A, 1, i - 1) O(lgn)
Problem.
Let S={(s1,p1), (s2,p2),…,(sn,pn)} where s(i) is a key and p(i) is the
priority of s(i).
How to design a data structure/algorithm to support the
following operations over S?
ExtractMin: Returns the element of S with minimum priority
Insert(s,p): Insert a new element (s,p) in S
RemoveMin: Remove the element in S with minimum p
Priority Queues
Properties
● Each element is associated with a value (priority)
● The key with the highest (or lowest) priority is extracted
first
● Major operations
○ Remove an element from the queue
○ Insert an element in the queue
12 9 4 X
Priority Queues
Goal:
– Return the largest element of the heap
Alg: HEAP-MAXIMUM(A)
Running time: O(1)
return A[1]
Heap A:
Heap-Maximum(A) returns 7
HEAP-EXTRACT-MAX
Goal:
– Extract the largest element of the heap (i.e., return the max value and
also remove that element from the heap
Idea:
– Exchange the root element with the last
– Decrease the size of the heap by 1 element
– Call MAX-HEAPIFY on the new root, on a heap of size n-1
Heap A: Root is the largest element
Example: HEAP-EXTRACT-MAX
16 1
14 10 max = 16 14 10
8 7 9 3 8 7 9 3
2 4 1 2 4
Heap size decreased with 1
14
Alg: HEAP-EXTRACT-MAX(A, n)
if n < 1
then error “heap underflow”
max ← A[1]
A[1] ← A[n]
MAX-HEAPIFY(A, 1, n-1)
return max
remakes heap
• Goal:
– Increases the key of an element i in the heap
• Idea:
– Increment the key of A[i] to its new value
– If the max-heap property does not hold anymore:
traverse a path toward the root to find the proper place
for the newly increased key
16
14 10
Key [i] ← 15 8 7 9 3
i
2 4 1
Example: HEAP-INCREASE-KEY
16 16
14 10 14 10
8 7 9 3 8 7 9 3
i i
2 4 1 2 15 1
Key [i ] ← 15
16 16
i
14 10 15 10
i
15 7 9 3 14 7 9 3
2 8 1 2 8 1
HEAP-INCREASE-KEY
• Goal: 16
14 10 14 10
8 7 9 3 8 7 9 3
2 4 1 -∞ 2 4 1 15
16 16
14 10 15 10
8 15 9 3 8 14 9 3
2 4 1 7 2 4 1 7
MAX-HEAP-INSERT
12 9 4 X
1) CPU Scheduling
2) Graph algorithms like Dijkstra’s shortest path algorithm,
Prim’s Minimum Spanning Tree, etc
3) All queue applications where priority is involved.
Problems