Lecture 10 - Dijkstra's path reconstruction, Minimum Spanning Trees, Huffman Encoding
Download
Report
Transcript Lecture 10 - Dijkstra's path reconstruction, Minimum Spanning Trees, Huffman Encoding
Dijkstra’s Algorithm
Announcements
Assignment #2 Due Tonight
Exams Graded
Assignment #3 Posted
Announcements
Last Time
Breadth First Search, Depth First Search
◦ Different algorithms for searching all nodes in
a graph.
Topological Sort
◦ Produces an ordering of vertices in a graph,
given certain constrains (A before B, B before
C, etc.)
Dijkstra’s Algorithm
◦ Finds the shortest paths from a source vertex
to all other vertices.
Today
Finish up Dijkstra’s
◦ Path reconstruction
MSTs – Minimum Spanning Tree
algorithms
◦ Prim’s
◦ Kruskal’s
Dijkstra’s Algorithm
This algorithm finds the shortest path from a
source vertex to all other vertices in a
weighted directed graph without negative
edge weights.
5
a
10
2
3
2
b
8
3
16
4
4
12
e
d
c
13
Dijkstra’s Path Reconstruction
Example shown on
the Board
Minimum Spanning Trees
In a weighted, undirected
graph, it is a tree formed
by connecting all of the
vertices with minimal
cost.
◦ The MST is a tree because
it’s acyclic.
◦ It’s spanning because it
covers every vertex.
◦ And it’s minimum because
it has minimum cost.
2
v1
4
1
2
v3
v2
3
7
v4
v5
4
8
5
10
v6
6
v7
1
2
v1
v2
1
v3
2
v4
v5
4
v6
1
6
v7
MSTs – proof that greedy works
Let G be a graph with
vertices in the set V
partitioned into two sets V1
and V2. Then the minimum
weight edge, e, that connects
a vertex from V1 to V2 is part
of a minimum spanning tree
of G.
Proof: Consider a MST T of G
that does NOT contain the
minimum weight edge e.
◦ This MUST have at least one
edge in between a vertex from
V1 to V2. (Otherwise, no
vertices between those two
sets would be connected.)
◦ Let G contain edge f that
connects V1 to V2.
◦ Now, add in edge e to T.
◦ This creates a cycle. In particular,
there was already one path from
every vertex in V1 to V2 and with
the addition of e, there are two.
◦ Thus, we can form a cycle
involving both e and f. Now,
imagine removing f from this
cycle.
◦ This new graph, T' is also a
spanning tree, but it's total
weight is less than or equal to T
because we replaced e with f,
and e was the minimum weight
edge.
MSTs – proof that greedy works
As a spanning tree is created
◦ If the edge that is added is the one of minimum cost
that avoids creation of a cycle.
◦ Then the cost of the resulting spanning tree cannot be
improved
Because any replacement edge would have cost at least as much
as an edge already in the spanning tree.
This is why greedy works!
Kruskal’s Algorithm
Let V =
For i=1 to n-1, (where there are n vertices in a graph)
V = V e, where e is the edge with the minimum edge
weight not already in V, and that does NOT
form a cycle when added to V.
Return V
Basically, you build the MST of the graph by continually
adding in the smallest weighted edge into the MST that
doesn't form a cycle.
◦ When you are done, you'll have an MST.
◦ You HAVE to make sure you never add an edge the forms a cycle
and that you always add the minimum of ALL the edges left that
don't.
Kruskal’s
Given Graph G:
Edges in sorted order:
4
v4
v1
4
1
v4
v6
v3
1
2
v1
3
v6
v4
v5
7
4
v3
v5
4
8
6
v7
1
Determine the MST:
v7
4
7
v4
2
v1
3
1
v5
v3
2
v2
CYCLE!
v4
v4
v6
v5
4
8
v1
10
6
v2
v4
v2
3
v6
v2
2
v3
1
v4
5
5
v7
v1
2
v3
v7
2
6
v2
v6
10
v5
1
v7
All Vertices, we’re
done!!
Kruskal’s
The reason this works:
◦ is that each added edge is
connecting between two
sets of vertices,
◦ and since we select the
edges in order by weight,
◦ we are always selecting the
minimum edge weight that
connects the two sets of
vertices.
Cycle detection:
◦ Keep track of disjoint
sets.
◦ Initially, each vertex is
in its own disjoint set.
◦ When you add an
edge you are unioning
two sets.
◦ A union cannot
happen if the two
vertices are already in
the same set.
This would create a
Prim’s Algorithm
This is quite similar to
Kruskal's with one big
difference:
◦ The tree that you are
"growing" ALWAYS stays
connected.
Whereas in Kruskal's you
could add an edge to your
growing tree that wasn't
connected to the rest of it,
here you can NOT do it.
Here is the algorithm:
1) Set S = .
1) Pick any vertex in the graph.
2) Add the minimum edge incident to that
vertex to S.
3) Continue to add edges into S (n-2 more
times) using the
following rule:
Add the minimum edge weight to S that
is incident to S
but that doesn't form a cycle when
added to S.
Prim’s
Given Graph G:
Edges in sorted order:
4
v4
v1
1
v4
v6
2
v1
3
v4
8
v5
7
6
v7
1
4
7
v4
2
v1
3
1
v5
v3
2
v2
CYCLE!
v4
v4
4
v3
v6
v5
4
8
v1
v5
4
Determine the MST, using Prim’s
starting with vertexV1:
v7
v2
v4
10
6
v2
2
v3
v6
v2
3
v6
5
v7
1
1
v4
5
v7
v3
v1
2
v3
4
2
6
v2
v6
10
v5
1
v7
All Vertices, we’re
done!!
Example on the board
Huffman Encoding
Compress the
storage of data using
variable length codes.
◦ For example, each
character in a text file
is stored using 8 bits.
◦ Nice and easy because
we always read in 8
bits for a single
character.
Not the most
efficient…
◦ What if ‘e’ is used 10
times more frequently
than ‘q’.
◦ It would be more
advantageous for us to
use a 7 bit code for e
and a 9 bit code for q.
Huffman Coding
Finds the optimal
way to take
advantage of varying
character frequencies
in a particular file.
◦ On average, standard
files can shrink them
anywhere from 10% to
30% depending to the
character distribution.
The idea behind the
coding is to give less
frequent characters and
groups of characters
longer codes.
Also, the coding is
constructed in such a
way that no two
constructed codes are
prefixes of each other.
This property about the
code is crucial with
respect to easily
deciphering the code.
Building a Huffman Tree
Example on the
board
References
Slides adapted from Arup Guha’s Computer
Science II Lecture notes:
http://www.cs.ucf.edu/~dmarino/ucf/cop3503/le
ctures/
Additional material from the textbook:
Data Structures and Algorithm Analysis in Java (Second
Edition) by Mark Allen Weiss
Additional images:
www.wikipedia.com
xkcd.com