Download Document

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Corecursion wikipedia , lookup

Clique problem wikipedia , lookup

Travelling salesman problem wikipedia , lookup

Centrality wikipedia , lookup

Signal-flow graph wikipedia , lookup

Dijkstra's algorithm wikipedia , lookup

Graph coloring wikipedia , lookup

Transcript
Chapter 14 (continued)
Graphs
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-1
Depth-First Search
• Depth-first search (DFS) traversal
– Proceeds along a path from v as deeply into the graph
as possible before backing up
– Does not completely specify the order in which it
should visit the vertices adjacent to v
– A last visited, first explored strategy
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-2
Depth-First Search
+dfs(in v:Vertex)
//Traverses a graph beginning at vertex v by
using a depth-first search: Recursive version
Mark v as visited
for(each unvisited vertex u adjacent to v)
dfs(u)
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-3
Breadth-First Search
• Breadth-first search (BFS) traversal
– Visits every vertex adjacent to a vertex v that it can
before visiting any other vertex
– A first visited, first explored strategy
– An iterative form uses a queue
– A recursive form is possible, but not simple
© 2006 Pearson Addison-Wesley. All rights reserved
5 B-4
Implementing a BFS Iterator
Class Using the JCF
• BFSIterator class uses the ListIterator
class
– As a queue to keep track of the order the vertices
should be processed
• BFSIterator constructor
– Initiates methods used to determine BFS order of
vertices for the graph
• Graph is searched by processing vertices from
each vertex’s adjacency list
– In the order that they were pushed onto the queue
© 2006 Pearson Addison-Wesley. All rights reserved
5 B-5
Applications of Graphs:
Topological Sorting
• Topological order
– A list of vertices in a directed graph without cycles such
that vertex x precedes vertex y if there is a directed
edge from x to y in the graph
– There may be several topological orders in a given
graph
• Topological sorting
– Arranging the vertices into a topological order
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-6
Topological Sorting
Figure 14-14
A directed graph without
cycles
Figure 14-15
The graph in Figure 14-14
arranged according to the
topological orders a) a, g, d,
b, e, c, f and b) a, b, g, d, e,
f, c
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-7
Topological Sorting
• Simple algorithms for finding a topological order
– topSort1
• Find a vertex that has no successor
• Remove from the graph that vertex and all edges that lead to it,
and add the vertex to the beginning of a list of vertices
• Add each subsequent vertex that has no successor to the
beginning of the list
• When the graph is empty, the list of vertices will be in
topological order
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-8
Topological Sorting
• Simple algorithms for finding a topological order
(Continued)
– topSort2
• A modification of the iterative DFS algorithm
• Strategy
– Push all vertices that have no predecessor onto a stack
– Each time you pop a vertex from the stack, add it to the
beginning of a list of vertices
– When the traversal ends, the list of vertices will be in
topological order
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-9
Spanning Trees
• A tree
– An undirected connected graph without cycles
• A spanning tree of a connected undirected graph G
– A subgraph of G that contains all of G’s vertices and
enough of its edges to form a tree
• To obtain a spanning tree from a connected
undirected graph with cycles
– Remove edges until there are no cycles
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-10
Spanning Trees
• You can determine whether a connected graph
contains a cycle by counting its vertices and edges
– A connected undirected graph that has n vertices must
have at least n – 1 edges
– A connected undirected graph that has n vertices and
exactly n – 1 edges cannot contain a cycle
– A connected undirected graph that has n vertices and
more than n – 1 edges must contain at least one cycle
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-11
Spanning Trees
Figure 14-19
Connected graphs that each have four vertices and three edges
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-12
The DFS Spanning Tree
• To create a depth-first search (DFS) spanning tree
– Traverse the graph using a depth-first search and mark
the edges that you follow
– After the traversal is complete, the graph’s vertices and
marked edges form the spanning tree
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-13
The BFS Spanning Tree
• To create a breath-first search (BFS) spanning tree
– Traverse the graph using a bread-first search and mark
the edges that you follow
– When the traversal is complete, the graph’s vertices and
marked edges form the spanning tree
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-14
Minimum Spanning Trees
• Minimum spanning tree
– A spanning tree for which the sum of its edge weights is
minimal
• Prim’s algorithm
– Finds a minimal spanning tree that begins at any vertex
– Strategy
• Find the least-cost edge (v, u) from a visited vertex v to some
unvisited vertex u
• Mark u as visited
• Add the vertex u and the edge (v, u) to the minimum spanning
tree
• Repeat the above steps until there are no more unvisited
vertices
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-15
Shortest Paths
• Shortest path between two vertices in a weighted
graph
– The path that has the smallest sum of its edge weights
• Dijkstra’s shortest-path algorithm
– Determines the shortest paths between a given origin
and all other vertices
– Uses
• A set vertexSet of selected vertices
• An array weight, where weight[v] is the weight of the shortest
(cheapest) path from vertex 0 to vertex v that passes through
vertices in vertexSet
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-16
Circuits
• A circuit
– A special cycle that passes through every vertex (or edge) in a
graph exactly once
• Euler circuit
– A circuit that begins at a vertex v, passes through every edge
exactly once, and terminates at v
– Exists if and only if each vertex touches an even number of edges
Figure 14-27
a) Euler’s bridge problem
and b) its multigraph
representation
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-17
Some Difficult Problems
• Three applications of graphs
– The traveling salesperson problem
– The three utilities problem
– The four-color problem
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-18
The Four Colour Problem
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-19
The Four Colour Problem
• Given graph, a colouring is an assignment
of colours to the vertices such that no
adjacent vertices are the same colour
• Related: colouring a map so that adjacent
countries are not the same colour
• Maps can be translated to planar graphs...
graphs with no crossing edges
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-20
The Four Colour Problem
• From maps to graphs
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-21
The Four Colour Problem
• Colouring a geographic map
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-22
The Four Colour Problem
• How many colours are needed to colour a
map?
• In 1852, Francis Guthrie observed that he
only needed 4 colours to colour a map of
the counties in England
• He conjectured that 4 is always enough
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-23
The Four Colour Problem
• After 124 years... a “proof” was produced
(Appel and Haken, 1976)
• But the proof basically worked like this:
– Find a whole bunch of important special cases
that capture all important configurations
[there were 1936 of these]
– Prove that all of these cases can be solved
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-24
The Four Colour Problem
• The “proof” uses a computer to find the
special cases... and it cannot be verified by
hand
• The written part of the proof is 500 pages,
and very tedious
– Has never been completely verified
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-25
The Four Colour Problem
• Is this a proof?
– If it can not be verified by hand, how do we
know the computer found all the right cases?
• This sparked major foundational debate
• We know proof != truth... so even if the
computer is right – do we have a proof?
• Debate has fizzled to some degree...
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-26
Summary
• The two most common implementations of a
graph are the adjacency matrix and the adjacency
list
• Graph searching
– Depth-first search goes as deep into the graph as it can
before backtracking
– Bread-first search visits all possible adjacent vertices
before traversing further into the graph
• Topological sorting produces a linear order of the
vertices in a directed graph without cycles
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-27
Summary
• Trees are connected undirected graphs without
cycles
– A spanning tree of a connected undirected graph is a
subgraph that contains all the graph’s vertices and
enough of its edges to form a tree
• A minimum spanning tree for a weighted
undirected graph is a spanning tree whose edgeweight sum is minimal
• The shortest path between two vertices in a
weighted directed graph is the path that has the
smallest sum of its edge weights
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-28
Summary
• An Euler circuit in an undirected graph is a cycle
that begins at vertex v, passes through every edge
in the graph exactly once, and terminates at v
• A Hamilton circuit in an undirected graph is a
cycle that begins at vertex v, passes through every
vertex in the graph exactly once, and terminates at
v
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-29
Exercise
• Write pseudocode for an iterative algorithm
that determines a DFS spanning tree for an
undirected graph.
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-30
Solution
dFSTree(v)
// Forms a spanning tree for a connected, undirected graph
// beginning at vertex v by using depth-first search:
// Iterative version.
s.createStack()
// push v onto stack and mark it
s.push(v)
Mark v as visited
//...cont’d
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-31
// loop invariant: there is a path from vertex v at the
// bottom of the stack s to the vertex at the top of s
while (!s.isEmpty())
{ if (no unvisited vertices are adjacent to
the vertex at the top of the stack)
s.pop() // backtrack
else
{ Select an unvisited vertex u adjacent to
the vertex at the top of the stack
Mark the edge from u to the vertex at the
the top of the stack.
s.push(u)
Mark u as visited
} // end if
} // end while
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-32
Exercise
• Revise the topSort1 algorithm by removing
predecessors instead of successors. Trace
the new algorithm for this graph:
a
d
© 2006 Pearson Addison-Wesley. All rights reserved
c
b
e
14 B-33
Solution
topSort1(g, l)
// Arranges the vertices of g into a
// topological order and places them in list l.
n = number of vertices in g
for(step = 1 through n)
{ select a vertex v that has no predecessors
l.listInsert(step, v)
Delete from g vertex v and its edges
} // end for
// end TopSort1
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-34
Solution
a
c
b
c
e
d
c
b
d
d
e
c
add b to list:
ab
c
add d to list:
abd
e
e
add a to list:
a
© 2006 Pearson Addison-Wesley. All rights reserved
add e to list:
abde
add c to list:
abdec
(done)
14 B-35
Exercise
•
In the text it says that a recursive BFS
algorithm is not straightforward.
a) why is this true?
b) Write the pseudocode for the recursive
version.
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-36
Solution
a) The recursive BFS algorithm is not simple
because the underlying data structure is a
queue. It must be a queue to ensure that
vertices close to the current vertex are
visited before those further away. DFS uses
a stack and so can naturally be implemented
recursively.
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-37
Solution (b)
bFS(v)
// Traverses a graph beginning at vertex v by using a
// breadth-first search: Recursive version.
q.createQueue()
Mark v as visited
for(each unvisited vertex u adjacent to v)
q.enqueue(u)
// loop invariant: there is a path from vertex v
// to every vertex in the queue q
while(!q.isEmpty())
{ w=q.dequeue()
bFS(w)
} // end while
© 2006 Pearson Addison-Wesley. All rights reserved
14 B-38