CSE 373 Data Structures and Algorithms Lecture 18: Hashing III.
Data Structures
-
Upload
steel-hunt -
Category
Documents
-
view
55 -
download
1
description
Transcript of Data Structures
Required ADT
• Maintain items with keys subject to
• Insert(x,Q)• min(Q)• Deletemin(Q)• Decrease-key(x,Q,Δ)• Delete(x,Q)
2
Required ADT
• Decrease-key(x,Q,Δ): Can simulate by
Delete(x,Q), insert(x-Δ,Q)
We can use Red-Black trees to implement all operations in O(log n) time
We want to implement Decrease-key in O(1) (amortized) time
3
Motivation
• Dijkstra’s algorithm for single source shortest path
• Prim’s algorithm for minimum spanning trees
4
Motivation
• Want to find the shortest route from New York to San Francisco
• Model the road-map with a graph
5
Model driving distances by weights on the edges
2 19
9
1
5
13
1710
148
21
V is a set of vertices
E is a set of edges (pairs of vertices)
7
Source and destination
V is a set of vertices
E is a set of edges (pairs of vertices)
2 19
9
1
5
13
1710
148
21
8
Dijkstra’s algorithm
• Assume all weights are non-negative
• Finds the shortest path from some fixed vertex s to every other vertex
9
Maintain an upper bound d(v) on the shortest path to v
0
∞
∞
∞
∞
s
s1
5
103
1
4
2s3
s2
s4
15 8
Example
11
s
s1
5
103
1
4
2s3
s2
s4
15 8
Maintain an upper bound d(v) on the shortest path to v
0
∞
∞
∞
∞
A node is either scanned (in S) or labeled (in Q)
Initially S = and Q = V
12
s
s1
5
103
1
4
2s3
s2
s4
15 8
Pick a vertex v in Q with minimum d(v) and add it to S
0
∞
∞
∞
∞
Initially S = and Q = V
13
s
s1
5
103
1
4
2s3
s2
s4
15 8
Pick a vertex v in Q with minimum d(v) and add it to S
0
∞
∞
∞
∞
Initially S = and Q = V
v
w15
For every edge (v,w) where w in Q relax(v,w) 14
s
s1
5
103
1
4
2s3
s2
s4
15 8
Relax(v,w)
If d(v) + w(v,w) < d(w) then d(w) ← d(v) + w(v,w) π(w) ← v
0
∞
∞
∞
∞
v
w
For every edge (v,w) where w in Q relax(v,w)
15
15
s
s1
5
103
1
4
2s3
s2
s4
15 8
0
5
∞
15
10
S = {s}
Pick a vertex v in Q with minimum d(v) and add it to S
22
s
s1
5
103
1
4
2s3
s2
s4
15 8
0
5
∞
15
10
S = {s,s1}
Pick a vertex v in Q with minimum d(v) and add it to S
23
s
s1
5
103
1
4
2s3
s2
s4
15 8
0
5
∞
15
10
S = {s,s1}
Pick a vertex v in Q with minimum d(v) and add it to S
Relax(s1,s3)
24
s
s1
5
103
1
4
2s3
s2
s4
15 8
0
5
∞
15
9
S = {s,s1}
Pick a vertex v in Q with minimum d(v) and add it to S
Relax(s1,s3)
25
s
s1
5
103
1
4
2s3
s2
s4
15 8
0
5
∞
15
9
S = {s,s1}
Pick a vertex v in Q with minimum d(v) and add it to S
Relax(s1,s3)Relax(s1,s2)
26
s
s1
5
103
1
4
2s3
s2
s4
15 8
0
5
6
15
9
S = {s,s1}
Pick a vertex v in Q with minimum d(v) and add it to S
Relax(s1,s3)Relax(s1,s2)
27
s
s1
5
103
1
4
2s3
s2
s4
15 8
0
5
6
15
9
S = {s,s1}
Pick a vertex v in Q with minimum d(v) and add it to S
28
s
s1
5
103
1
4
2s3
s2
s4
15 8
0
5
6
15
9
S = {s,s1,s2}
Pick a vertex v in Q with minimum d(v) and add it to S
29
s
s1
5
103
1
4
2s3
s2
s4
15 8
0
5
6
15
9
S = {s,s1,s2}
Pick a vertex v in Q with minimum d(v) and add it to S
Relax(s2,s3)
30
s
s1
5
103
1
4
2s3
s2
s4
15 8
0
5
6
15
8
S = {s,s1,s2}
Pick a vertex v in Q with minimum d(v) and add it to S
Relax(s2,s3)
31
s
s1
5
103
1
4
2s3
s2
s4
15 8
0
5
6
15
8
S = {s,s1,s2}
Pick a vertex v in Q with minimum d(v) and add it to S
32
s
s1
5
103
1
4
2s3
s2
s4
15 8
0
5
6
15
8
S = {s,s1,s2,s3}
Pick a vertex v in Q with minimum d(v) and add it to S
33
s
s1
5
103
1
4
2s3
s2
s4
15 8
0
5
6
15
8
S = {s,s1,s2,s3,s4}
Pick a vertex v in Q with minimum d(v) and add it to S
34
s
s1
5
103
1
4
2s3
s2
s4
15 8
0
5
6
15
8
S = {s,s1,s2,s3,s4}
When Q = then the d() values are the distances from s
The π function gives the shortest path tree
35
s
s1
5
103
1
4
2s3
s2
s4
15 8
0
5
6
15
8
S = {s,s1,s2,s3,s4}
When Q = then the d() values are the distances from s
The π function gives the shortest path tree
36
Implementation of Dijkstra’s algorithm
• We need to find efficiently the vertex with minimum d() in Q
• We need to update d() values of vertices in Q
37
Required ADT
• Maintain items with keys subject to
• Insert(x,Q)• min(Q)• Deletemin(Q)• Decrease-key(x,Q,Δ)
38
Required ADT
• Insert(x,Q)• min(Q)• Deletemin(Q)• Decrease-key(x,Q,Δ): Can simulate
by Delete(x,Q), insert(x-Δ,Q)
39
• Insert(x,Q)• min(Q)• Deletemin(Q)• Decrease-key(x,Q,Δ): Can simulate
by Delete(x,Q), insert(x-Δ,Q)
How many times we do these operations ?
n = |V|
n
n
m = |E|
Total running time: O(m log n) → O(m + n log n)
40
Heap• Heap is
An almost complete binary tree The items at the children of v are
greater than the one at v
Heap-ordered tree
23
7
17
3365
1924 2629
7940
41
• Representing a heap with an array Get the elements from top to
bottom, from left to right
Array Representation
23
7
17
3365
1924 2629
7 23 17 24 29 26 19 65 33 40 79
7940
Q42
Array Representation
23
7
17
3365
1924 2629
7 23 17 24 29 26 19 65 33 40 79
7940
• Left(i): 2i+1• Right(i): 2i+2• Parent(i): (i-1)/2
Q43
0 1 2 3 4 5 6 7 8 9 10
Heap Representation I
info29key
11
Q
arraylen
9n
Store associated information directly in the array
Should only be used only for succinct information
john
Delete the minimum
23
17
19
3365
7924 2629
17 23 19 24 29 26 79 65 33 40
40
Q
Q[0] ← Q[size(Q)-1]
Heapify-down(Q,0)
size(Q) ← size(Q)-1
53
Heapify-down(Q,i)• Heapify-down(Q, i)• l ← left(i)• r ← right(i)• smallest ← i• if l < size(Q) and Q[l] < Q[smallest]
then smallest ← l• if r < size(Q) and Q[r] < Q[smallest]
then smallest ← r• if smallest > i then
Q[i] ↔ Q[smallest]
Heapify-down(Q, smallest)54
Inserting an item
23
17
19
3365
7924 2629
17 23 19 24 29 26 79 65 33 40 15
40
Q
Insert(15,Q)Q[size(Q)] ← 15
15
Heapify-up(Q,size(Q))size(Q) ← size(Q) + 1
56
Q
Heapify-up
• Heapify-up(Q, i)• while i > 0 and Q[i] < Q[parent(i)] do• Q[i] ↔ Q[parent(i)]• i ← parent(i)
17
15
19
3365
7924 2623
40 29
15 17 19 24 23 26 79 65 33 40 29 60
Heapsort (Williams, Floyd, 1964)
• Put the elements in an array• Turn the array into a heap• Do a delete-min and put the
deleted element at the last position of the array
• Reverse the array, or use a max-heap
62
65
79
26
3323
2924 1519
79 65 26 24 19 15 29 23 33 40 7
740
Q
Turn an array into a heap
63
0
1 2
3 4 5 6
7 8 9 10
65
79
26
3323
2924 1519
79 65 26 24 19 15 29 23 33 40 7
740
Q
Heapify-down(Q,4)
64
4
Turn an array into a heap
65
79
26
3323
2924 157
79 65 26 24 7 15 29 23 33 40 19
1940
Q
Heapify-down(Q,4)
65
Turn an array into a heap
65
79
26
3323
2924 157
79 65 26 24 7 15 29 23 33 40 19
1940
Q
Heapify-down(Q,3)
66
3
Turn an array into a heap
65
79
26
3324
2923 157
79 65 26 23 7 15 29 24 33 40 19
1940
Q
Heapify-down(Q,3)
67
Turn an array into a heap
65
79
26
3324
2923 157
79 65 26 23 7 15 29 24 33 40 19
1940
Q
Heapify-down(Q,2)
68
2
Turn an array into a heap
65
79
15
3324
2923 267
79 65 15 23 7 26 29 24 33 40 19
1940
Q
Heapify-down(Q,2)
69
Turn an array into a heap
65
79
15
3324
2923 267
79 65 15 23 7 26 29 24 33 40 19
1940
Q
Heapify-down(Q,1)
70
1
Turn an array into a heap
7
79
15
3324
2923 2665
79 7 15 23 65 26 29 24 33 40 19
1940
Q
Heapify-down(Q,1)
71
Turn an array into a heap
7
79
15
3324
2923 2619
79 7 15 23 19 26 29 24 33 40 65
6540
Q
Heapify-down(Q,1)
72
Turn an array into a heap
7
79
15
3324
2923 2619
79 7 15 23 19 26 29 24 33 40 65
6540
Q
Heapify-down(Q,0)
73
0
Turn an array into a heap
79
7
15
3324
2923 2619
7 79 15 23 19 26 29 24 33 40 65
6540
Q
Heapify-down(Q,0)
74
Turn an array into a heap
19
7
15
3324
2923 2679
7 19 15 23 79 26 29 24 33 40 65
6540
Q
Heapify-down(Q,0)
75
Turn an array into a heap
19
7
15
3324
2923 2640
7 19 15 23 40 26 29 24 33 79 65
6579
Q
Heapify-down(Q,0)
76
Turn an array into a heap
23
7
15
3379
2924 2619
6540
How much time does it take to build the heap this way ?
Total time = 77
At most n/2 nodes heapified at height 1
At most n/4 nodes heapified at height 2
At most n/8 nodes heapified at height 3
23
7
15
3379
2924 2619
6540
How much time does it take to build the heap this way ?
Total time = 78
At most n/2 nodes heapified at height 1
At most n/4 nodes heapified at height 2
At most n/8 nodes heapified at height 3
Summary
• We can build the heap in linear time
• We still have to deletemin the elements one by one in order to sort that will take O(nlog(n))
79