graphs
DESCRIPTION
Graphs. 1843. ORD. SFO. 802. 1743. 337. 1233. LAX. DFW. Outline and Reading. Graphs (§6.1) Definitions Applications Terminology Properties ADT Data structures for graphs (§6.2) Edge list structure Adjacency list structure Adjacency matrix structure. - PowerPoint PPT PresentationTRANSCRIPT
Graphs
ORD
DFW
SFO
LAX
802
1743
1843
1233
337
2
Outline and ReadingGraphs (§6.1) Definitions Applications Terminology Properties ADT
Data structures for graphs (§6.2) Edge list structure Adjacency list structure Adjacency matrix structure
3
Position ADT- Recall from Chpt 2
The Position ADT models the notion of the place within a data structure where a single object is storedIt gives a unified view of diverse ways of storing data, such as a cell of an array a node of a linked list
Just one method: object element(): returns the element stored
at the position
4
GraphA graph is a pair (V, E), where V is a set of nodes, called vertices E is a collection of pairs of vertices, called edges Vertices and edges are positions and store elements
Edges can be directed or undirected.If all the edges are directed, the graph is called a directed graph or digraph.
ORD PVD
MIADFW
SFO
LAX
LGA
HNL
849
802
13871743
1843
10991120
1233337
2555
142
5
Examples of GraphsAirline route map Vertices: an airport identified by a three-letter
airport code Edges: a flight route between two airports and
specified by the mileage of the route
Flowcharts These represent the flow of control in a procedure. Vertices: symbolic flowchart boxes and diamonds Edges: connecting lines
Binary relations We say xRy if (x,y) ε SxS, where S is a set. Vertices: elements in S Edges: connect x and y iff xRy.
6
Examples of Graphs
Computer networks Vertices: computers Edges: communication links
Electric circuits Vertices: diodes, transistors, capacitors, switches,
... Edges: Connecting wires
These examples suggest the type of questions that can be asked when working with graphs:
What is the cheapest way to fly to NY What route involves the least flying time? If one city is closed due to bad weather, does a route to NY
exist?
7
Edge TypesDirected edge
ordered pair of vertices (u,v) first vertex u is the origin second vertex v is the
destination e.g., a flight
Undirected edge unordered pair of vertices (u,v) e.g., a flight route
Directed graph all the edges are directed e.g., flight network
Undirected graph all the edges are undirected e.g., route network
ORD PVDflight
AA 1206
ORD PVD849
miles
8
John
DavidPaul
brown.edu
cox.net
cs.brown.edu
att.netqwest.net
math.brown.edu
cslab1bcslab1a
ApplicationsElectronic circuits
Printed circuit board Integrated circuit
Transportation networks Highway network Flight network
Computer networks Local area network Internet Web
Databases Entity-relationship diagram
9
TerminologyEnd vertices (or endpoints) of an edge
U and V are the endpoints of a
Edges incident on a vertex a, d, and b are incident on V
Adjacent vertices U and V are adjacent
Degree of a vertex X has degree 5
Parallel edges h and i are parallel edges
Self-loop j is a self-loop
XU
V
W
Z
Y
a
c
b
e
d
f
g
h
i
j
10
P1
Terminology (cont.)Path
sequence of alternating vertices and edges
begins with a vertex ends with a vertex each edge is preceded and
followed by its endpointsSimple path
path such that all its vertices and edges are distinct
Examples P1=(V,b,X,h,Z) is a simple path P2=(U,c,W,e,X,g,Y,f,W,d,V) is a
path that is not simple
XU
V
W
Z
Y
a
c
b
e
d
f
g
hP2
11
Terminology (cont.)Cycle
circular sequence of alternating vertices and edges
each edge is preceded and followed by its endpoints
Simple cycle cycle such that all its vertices
and edges are distinctExamples
C1=(V,b,X,g,Y,f,W,c,U,a,) is a simple cycle
C2=(U,c,W,e,X,g,Y,f,W,d,V,a,) is a cycle that is not simple
C1
XU
V
W
Z
Y
a
c
b
e
d
f
g
hC2
12
Properties
Notation n number of vertices m number of edgesdeg(v) degree of vertex v
Property 1
v deg(v) 2m
Proof: each edge is counted twiceProperty 2
In an undirected graph with no self-loops and no multiple edges (i.e. a simple graph)
m n (n 1)2Proof: No 2 edges can have thesame endpoints. Thus, eachvertex has degree at most (n -1).Thus, by above, 2m≤n(n-1)
What is the bound for a directed graph?
m≤n(n-1) Proof: No edge can have the same
origin and destination.
Example n 4 m 6 deg(v) 3
13
Iterator ADT- Recall from Chpt 2An iterator abstracts the process of scanning through a collection of elementsMethods of the ObjectIterator ADT:
object object() boolean hasNext() object nextObject() reset()
Extends the concept of Position by adding a traversal capabilityImplement with an array or singly linked list
An iterator is typically associated with an another data structureWe can augment the Stack, Queue, Vector, List and Sequence ADTs with method:
ObjectIterator elements()
Two notions of iterator: snapshot: freezes the
contents of the data structure at a given time
dynamic: follows changes to the data structure
14
Main Methods of the Graph ADTv=vertex & e=edge
are positions store elements (o)
Update methods insertVertex(o) insertEdge(v, w, o) insertDirectedEdge(v, w,
o) removeVertex(v) removeEdge(e) makeUndirected(e) reverseDirection(e) setDirectionFrom(e,v) setDirectionTo(e,v)
Generic methods numVertices() numEdges() vertices() edges()
See pages 294 and 295 for definitions, although most are obvious.
Color key: Returns an iteratorBoolean
15
Main Methods of the Graph ADTAccessor methods
aVertex() - returns any vertex as a graph may not have a special vertex
incidentEdges(v) adjacentEdges(v) endVertices(e) opposite(v, e) areAdjacent(v, w) degree(v)
See pages 294 and 295 for definitions, although most are obvious.Color key: Returns an iteratorBoolean
Needed for graphs with directed edges
directedEdges() undirectedEdges() origin(e) destination(e) isDirected(e)
Relating methods inDegree(v) outDegree(v) inIncidentEdges(v) outIncidentEdges(v) inAdjacentVertices(v) outAdjacentVertices(v)
16
Why are there so many methods for graphs?
Graphs are very rich and versatile structures.Therefore, the number of methods is unavoidable when describing the needed methods.Realize that graphs support two kinds of positions - vertices and edges.Moreover, edges can be directed or undirected.Consequently, we need different methods for accessing and updating all these different positions as well as handling relationships between the different positions.
17
Data Structures for GraphsMost commonly used
Edge list structure Adjacency list structure Adjacency matrix structure
Each has its own strengths and weaknesses in terms of what methods are easier to use and the cost of storage space.The edge list and the adjacency list actually store representations of the edges.The adjacency matrix format only uses a placeholder for every pair of vertices.This implies, as we will see, that the list structures use O(n+m) space and matrix format uses O(n^2) where n is number of vertices and m is number of edges.
18
Sequence ADT Recall from Chpt 2
The Sequence ADT is the union of the Vector and List ADTsElements accessed by
Rank, or Position
Generic methods: size(), isEmpty()
Vector-based methods: elemAtRank(r),
replaceAtRank(r, o), insertAtRank(r, o), removeAtRank(r)
List-based methods: first(), last(),
before(p), after(p), replaceElement(p, o), swapElements(p, q), insertBefore(p, o), insertAfter(p, o), insertFirst(o), insertLast(o), remove(p)
Bridge methods: atRank(r), rankOf(p)
19
Applications of Sequences
The Sequence ADT is a basic, general-purpose, data structure for storing an ordered collection of elementsDirect applications:
Generic replacement for stack, queue, vector, or list
small database (e.g., address book)
Indirect applications: Building block of more complex data structures
20
Edge List StructureVertex sequence
sequence of vertex objects
Vertex object element reference to position in
vertex sequenceEdge object
element origin vertex object destination vertex object reference to position in
edge sequenceEdge sequence
sequence of edge objects
Note: Works for both directed and undirected graphs.
v
u
w
a c
b
a
zd
u v w z
b c d
21
Edge List Structure - NotesThis is the simplest and most used data structure for a graph.The vertex and edge sequence could be a list, vector, or dictionary.If we use a vector representation, we could think of the vertices as being numbered.Vertex and edge objects may contain additional information, especially for graphs with some directed edges i,e, an edge vertex could have a Boolean variable indicating whether or not it was directed.Main feature: Provides direct access from edges to the vertices to which they are incident.But, accessing the edges that are incident on a vertex requires that all edges be examined.Obviously, performance of the various methods is very dependent upon which representation is chosen.
22
Adjacency List StructureVertex sequence
sequence of vertex objects
Vertex object element reference to position
in vertex sequence reference to incident
objectIncidence sequence for each vertex
sequence of references to edge objects of incident edges
Augmented edge objects references to
associated positions in incidence sequences of end vertices
u
v
w
a b
a
u v w
b
23
Adjacency List Structure - Notes
Typically the incident sequence is implemented as a list, but could use a dictionary or a priority queue if their characteristics are useful.Structure provides direct access from both the edges to the vertices and from the vertices to their incident edges.Structure matches the performance of the edge list representation, but has improved running time when the above characteristic can be exploited - i.e. given a vertex, return an iterator of incident edges.
24
Adjacency Matrix StructureVertex list structureAugmented vertex objects
Integer key (index) associated with vertex
2D adjacency array Reference to edge
object for adjacent vertices
Null for non nonadjacent vertices
The “old fashioned” version just has 0 for no edge and 1 for edgeEdge objectsEdge list structure
u
v
w
a b
0 1 2
0
1
2 a
u v w0 1 2
b
25
Notes for Adjacency Matrix
Historically, the adjacency matrix was the first represented as a Boolean matrix with A[i,j] = 1 if an edge existed between vertex i and j and 0 otherwise.The representation shown here updates this to a more object-oriented environment where you use an interface to access the structure.In all of these structures, additional data may be stored in vertex or edge objects. For example, if edges are being used in a problem about distances between to cities, those distances could be stored in the edge objects.
26
Asymptotic Performance n vertices, m edges no parallel edges no self-loops Bounds are “big-
Oh”
EdgeList
AdjacencyList
Adjacency Matrix
Space n m n m n2
incidentEdges(v) m deg(v) n
areAdjacent (v, w) m min(deg(v), deg(w)) 1
insertVertex(o) 1 1 n2
insertEdge(v, w, o) 1 1 1
removeVertex(v) m deg(v) n2
removeEdge(e) 1 1 1
Depth-First Search
DB
A
C
E
28
Outline and ReadingDefinitions (§6.1) Subgraph Connectivity Spanning trees and forests
Depth-first search (§6.3.1) Algorithm Example Properties Analysis
Applications of DFS (§6.5) Path finding Cycle finding
29
Subgraphs
A subgraph S of a graph G is a graph such that The vertices of S are
a subset of the vertices of G
The edges of S are a subset of the edges of G
A spanning subgraph of G is a subgraph that contains all the vertices of G
Subgraph
Spanning subgraph
30
Connectivity
A graph is connected if there is a path between every pair of verticesA connected component of a graph G is a maximal connected subgraph of G
Connected graph
Non connected graph with two connected components
31
Trees and ForestsA (free) tree is an undirected graph T such that T is connected T has no cyclesThis definition of tree is
different from the one of a rooted tree
A forest is an undirected graph without cyclesThe connected components of a forest are trees
Tree
Forest
32
Spanning Trees and ForestsA spanning tree of a connected graph is a spanning subgraph that is a treeA spanning tree is not unique unless the graph is a treeSpanning trees have applications to the design of communication networksA spanning forest of a graph is a spanning subgraph that is a forest
Graph
Spanning tree
33
Traversing a GraphA traversal of a graph is a systematic procedure for exploring a graph by examining all of its vertices and edges.Example: Web spider or crawler which is the data collecting
part of a search engine that visits all the hypertext documents on the web. (The documents are vertices and the hyperlinks are the edges).
34
Depth-First Search
Depth-first search (DFS) is a general technique for traversing a graphA DFS traversal of a graph G does the following: Visits all the vertices
and edges of G Determines whether G
is connected Computes the
connected components of G
Computes a spanning forest of G
DFS on a graph with n vertices and m edges takes O(nm ) timeDFS can be further extended to solve other graph problems Find and report a
path between two given vertices
Find a cycle in the graph
Depth-first search is to graphs what Euler tour is to binary trees
35
Depth-First SearchDFS utilizes backtracking as you would if you were wandering through a maze.Start at a vertex in G with string; attached the string at the vertex; mark the vertex as "visited".Explore G by moving out along the incident edges according to some predetermined scheme for ordering and unroll the string.If you can move to a new vertex, mark it as "visited".If you hit a "visited" node, backtrack to the last vertex rolling up the string as you go and see if we can move out from there.The process terminates when the backtracking returns to the place where the string was attached - i.e. the start vertex.
36
Depth-First SearchIt's useful to distinguish edges by their use: Discovery (or tree) edges - those that are followed to
discover new vertices. Back edges - those that lead to already visited vertices.
For back edges, you need to backtrack to the last visited node and decide if you can move out from it without hitting a visited node.
The discovery edges form a spanning tree of the connected components of the starting vertex - called a DFS tree.The back edges are also useful - assuming the DFS tree is rooted at the starting vertex, each back edge leads back from a vertex in the tree to one of its ancestors in the tree.
37
Example
DB
A
C
E
DB
A
C
E
DB
A
C
E
discovery edgeback edge
A visited vertex
A unexplored vertex
unexplored edge
38
Example (cont.)
DB
A
C
E
DB
A
C
E
DB
A
C
E
DB
A
C
E
39
DFS and Maze Traversal The DFS algorithm is similar to a classic strategy for exploring a maze We mark each
intersection, corner and dead end (vertex) visited
We mark each corridor (edge ) traversed
We keep track of the path back to the entrance (start vertex) by means of a rope (recursion stack)
40
Often Posed as Programming Contest Problem
Given a maze represented as follows:
0 0 0 0 0 0 -1 0
0 1 1 1 0
0 0
0 1 1 1 1 0
0 1 0
0 1 0
0 0 0 0 0 0 0
1=wall , -1=exit. Start at the bottom.
To walk systematically, we'll try to go N, W, E, S
41
Often Posed as Programming Contest Problem
Given a maze represented as follows:
0 0 0 0 0 0 -1 0
0 1 1 1 0
0 0
0 1 1 1 1 0
0 1 0
0 1 0
0 X 0 0 0 0 0 0
1=wall , -1=exit. Start at the bottom.
To walk systematically, we'll try to go N, W, E, S
42
Often Posed as Programming Contest Problem
Given a maze represented as follows:
0 0 0 0 0 0 -1 0
0 1 1 1 0
0 0
0 1 1 1 1 0
0 1 0
0 X 1 0
0 X 0 0 0 0 0 0
1=wall , -1=exit. Start at the bottom.
To walk systematically, we'll try to go N, W, E, S
43
Often Posed as Programming Contest Problem
Given a maze represented as follows:
0 0 0 0 0 0 -1 0
0 1 1 1 0
0 0
0 1 1 1 1 0
0 X 1 0
0 X 1 0
0 X 0 0 0 0 0 0
1=wall , -1=exit. Start at the bottom.
To walk systematically, we'll try to go N, W, E, S
44
Often Posed as Programming Contest Problem
Given a maze represented as follows:
0 0 0 0 0 0 -1 0
0 1 1 1 0
0 0
0 1 1 1 1 0
0 X X 1 0
0 X 1 0
0 X 0 0 0 0 0 0
1=wall , -1=exit. Start at the bottom.
To walk systematically, we'll try to go N, W, E, S
45
Often Posed as Programming Contest Problem
Given a maze represented as follows:
0 0 0 0 0 0 -1 0
0 1 1 1 0
0 X X 0
0 1 X 1 1 1 0
0 X X 1 0
0 X 1 0
0 X 0 0 0 0 0 0
1=wall , -1=exit. Start at the bottom.
To walk systematically, we'll try to go N, W, E, S
46
Often Posed as Programming Contest Problem
Given a maze represented as follows:
0 0 0 0 0 0 -1 0
0 1 1 1 0
0 X X 0
0 1 X 1 1 1 0
0 X X 1 0
0 X 1 0
0 X 0 0 0 0 0 0
1=wall , -1=exit. Start at the bottom.
To walk systematically, we'll try to go N, W, E, S
47
Often Posed as Programming Contest Problem
Given a maze represented as follows:
0 0 0 0 0 0 -1 0
0 1 1 X 1 0
0 X X 0
0 1 X 1 1 1 0
0 X X 1 0
0 X 1 0
0 X 0 0 0 0 0 0
1=wall , -1=exit. Start at the bottom.
To walk systematically, we'll try to go N, W, E, S
48
Often Posed as Programming Contest Problem
Given a maze represented as follows:
0 0 0 0 0 0 -1 0
0 1 1 X X 1 0
0 X X 0
0 1 X 1 1 1 0
0 X X 1 0
0 X 1 0
0 X 0 0 0 0 0 0
1=wall , -1=exit. Start at the bottom.
To walk systematically, we'll try to go N, W, E, S
49
Often Posed as Programming Contest Problem
Given a maze represented as follows:
0 0 0 0 0 0 -1 0
0 1 1 X X 1 0
0 X X 0
0 1 X 1 1 1 0
0 X X 1 0
0 X 1 0
0 X 0 0 0 0 0 0
1=wall , -1=exit. Start at the bottom.
To walk systematically, we'll try to go N, W, E, S
50
Often Posed as Programming Contest Problem
Given a maze represented as follows:
0 0 0 0 0 0 -1 0
0 1 1 X X 1 X 0
0 X X X X X 0
0 1 X 1 1 1 0
0 X X 1 0
0 X 1 0
0 X 0 0 0 0 0 0
1=wall , -1=exit. Start at the bottom.To walk systematically, we'll try to go N, W, E, S The exact path taken depends on this ordering.
51
DFS AlgorithmThe algorithm uses a mechanism for setting and getting “labels” of vertices and edges
Algorithm DFS(G, v)Input graph G and a start vertex v of G Output labeling of the edges of G
in the connected component of v as discovery edges and back edges
setLabel(v, VISITED)for all e G.incidentEdges(v)
if getLabel(e) UNEXPLORED
w G.opposite(v,e)if getLabel(w)
UNEXPLOREDsetLabel(e, DISCOVERY)DFS(G, w)
elsesetLabel(e, BACK)
Algorithm DFS(G)Input graph GOutput labeling of the edges of G
as discovery edges andback edges
for all u G.vertices()setLabel(u, UNEXPLORED)
for all e G.edges()setLabel(e, UNEXPLORED)
for all v G.vertices()if getLabel(v)
UNEXPLOREDDFS(G, v)
52
Properties of DFS
Property 1DFS(G, v) visits all the vertices and edges in the connected component of v
Property 2The discovery edges labeled by DFS(G, v) form a spanning tree of the connected component of v
DB
A
C
E
53
Analysis of DFS
Setting/getting a vertex/edge label takes O(1) timeEach vertex is labeled twice once as UNEXPLORED once as VISITED
Each edge is labeled twice once as UNEXPLORED once as DISCOVERY or BACK
Method incidentEdges is called once for each vertexDFS runs in O(n m) time provided the graph is represented by the adjacency list structure Recall that v deg(v) 2m
54
Path FindingWe can specialize the DFS algorithm to find a path between two given vertices u and z We call DFS(G, u) with u as the start vertexWe use a stack S to keep track of the path between the start vertex and the current vertexAs soon as destination vertex z is encountered, we return the path as the contents of the stack
Algorithm pathDFS(G, v, z)setLabel(v, VISITED)S.push(v)if v z
return S.elements()for all e G.incidentEdges(v)
if getLabel(e) UNEXPLORED
w opposite(v, e)if getLabel(w)
UNEXPLORED setLabel(e, DISCOVERY)S.push(e)pathDFS(G, w, z)S.pop() { e gets
popped }else
setLabel(e, BACK)S.pop() { v gets popped }
55
Cycle Finding
We can specialize the DFS algorithm to find a simple cycle We use a stack S to keep track of the path between the start vertex and the current vertexAs soon as a back edge (v, w) is encountered, we return the cycle as the portion of the stack from the top to vertex w
Algorithm cycleDFS(G, v, z)setLabel(v, VISITED)S.push(v)for all e G.incidentEdges(v)
if getLabel(e) UNEXPLOREDw opposite(v,e)S.push(e)if getLabel(w) UNEXPLORED
setLabel(e, DISCOVERY)pathDFS(G, w, z)S.pop()
elseC new empty stackrepeat
o S.pop()C.push(o)
until o wreturn C.elements()
S.pop()
Biconnectivity
SEA PVD
MIASNA
ORDFCO
57
Outline and Reading
Definitions (§6.3.2) Separation vertices and edges Biconnected graph Biconnected components Equivalence classes Linked edges and link components
Algorithms (§6.3.2) Auxiliary graph Proxy graph
58
Separation Edges and VerticesDefinitions
Let G be a connected graph A separation edge of G is an edge whose removal disconnects G A separation vertex of G is a vertex whose removal disconnects
G Applications
Separation edges and vertices represent single points of failure in a network and are critical to the operation of the network
Example DFW, LGA and LAX are separation vertices (DFW,LAX) is a separation edge
ORD PVD
MIADFW
SFO
LAX
LGA
HNL
59
Biconnected GraphEquivalent definitions of a biconnected graph G Graph G has no separation edges and no
separation vertices For any two vertices u and v of G, there are two
disjoint simple paths between u and v (i.e., two simple paths between u and v that share no other vertices or edges)
For any two vertices u and v of G, there is a simple cycle containing u and v
ExampleORD
PVD
MIADFW
SFO
LAX
LGAHNL
60
Biconnected ComponentsBiconnected component of a graph G
A maximal biconnected subgraph of G, or A subgraph consisting of a separation edge of G and its
end verticesInteraction of biconnected components
An edge belongs to exactly one biconnected component A nonseparation vertex belongs to exactly one
biconnected component A separation vertex belongs to two or more biconnected
componentsExample of a graph with four biconnected components
ORD PVD
MIADFW
SFO
LAX
LGA
HNLRDU
61
Equivalence ClassesGiven a set S, a relation R on S is a set of ordered pairs of elements of S, i.e., R is a subset of SS
An equivalence relation R on S satisfies the following propertiesReflexive: (x,x)RSymmetric: (x,y)R (y,x) RTransitive: (x,y)R (y,z)R (x,z) R
An equivalence relation R on S induces a partition of the elements of S into equivalence classes (i.e. the classes are pairwise disjoint and their union is S.Example (connectivity relation among the vertices of a graph):
Let V be the set of vertices of a graph G Define the relation
C = {(v,w) VV such that G has a path from v to w} Relation C is an equivalence relation The equivalence classes of relation C are the vertices in each
connected component of graph G
62
Equivalence RelationsThese abstract the notion of equality for numbers.Obviously, equality for numbers is an equivalence
relation.But, there are many such equivalence relations.Example: For positive integers a,b,c,d, define for
fractions, a/b = c/d if and only if ad=bc.Proof:reflexive: a/b = a/b because ab=basymmetric: a/b = c/d implies c/d = a/b because
ad=bc implies cb=da. So, c/d=a/btransitive: a/b = c/d and c/d = e/f implies a/b = e/f
(complete this proof)
63
Equivalence Relations
What are the equivalence classes of the last equivalence relation?[1/2] = {x/y | 1/2= x/y}i.e. all the positive fractions we view as having 1/2 as its reduced form.i.e. [1/2] = {1/2, 2/4, 3/6, 4/8,...}Note: There is really nothing special about 1/2, [2/4], [3/6], [4/8] ... are all [1/2].
64
Link Relation
Edges e and f of connected graph G are linked if
e f, or G has a simple cycle
containing e and fTheorem:
The link relation on the edges of a graph is an equivalence relationProof Sketch: The reflexive and
symmetric properties follow from the definition
For the transitive property, consider two simple cycles sharing an edge
ab
g
cj
d
e
f
i
Equivalence classes of linked edges:{a} {b, c, d, e, f} {g, i, j}
ab
g
cj
d
e
f
i
65
Link ComponentsThe link components of a connected graph G are the equivalence classes of edges with respect to the link relationA biconnected component of G is the subgraph of G induced by an equivalence class of linked edgesA separation edge is a single-element equivalence class of linked edgesA separation vertex has incident edges in at least two distinct equivalence classes of linked edge (Note this does not violate the property that equivalence classes are pairwise disjoint.)
ORD PVD
MIADFW
SFO
LAX
LGA
HNLRDU
66
Auxiliary GraphAuxiliary graph B for a connected graph G Associated with a DFS
traversal of G The vertices of B are the
edges of G For each back edge e of G, B
has edges (e,f1), (e,f2) , …, (e,fk),where f1, f2, …, fk are the discovery edges of G that form a simple cycle with e
Its connected components correspond to the the link components of G
a
b
g
c
j
d
e
f
i
Auxiliary graph B
DFS on graph G
a
d
b
c
eh
i
jf
h
g
i
67
Auxiliary Graph (cont.)
In the worst case, the number of edges of the auxiliary graph is proportional to nm
Auxiliary graph BDFS on graph G
68
Proxy Graph Proxy graph F for a connected graph G
Spanning forest of the auxiliary graph B
Has m vertices and O(m) edges Can be constructed in O(n m)
time Its connected components
(trees) correspond to the the link components of G
Given a graph G with n vertices and m edges, we can compute the following in O(n m) time
The biconnected components of G
The separation vertices of G The separation edges of G
a
b
g
c
j
d
e
f
i
Proxy graph F
DFS on graph G
a
d
b
c
eh
i
jf
h
g
i
69
Proxy Graph Constructed Using DFSAlgorithm proxyGraph(G)
Input connected graph GOutput proxy graph F for GF empty graphDFS(G, s) { s is any vertex of G}for all discovery edges e of G
F.insertVertex(e)setLabel(e, UNLINKED)
for all vertices v of G in DFS visit order
for all back edges e (u,v) F.insertVertex(e)repeat
f discovery edge with dest. u
F.insertEdge(e,f,) if f getLabel(f)
UNLINKEDsetLabel(f, LINKED)u origin of edge f
elseu v { ends the loop }
until u vreturn F
a
b
g
c
j
d
e
f
i
Proxy graph F
DFS on graph G
a
d
b
c
eh
i
jf
h
g
i
Breadth-First Search
CB
A
E
D
L0
L1
FL2
71
Outline and Reading
Breadth-first search (§6.3.3) Algorithm Example Properties Analysis Applications
DFS vs. BFS (§6.3.3) Comparison of applications Comparison of edge labels
72
Breadth-First Search
Breadth-first search (BFS) is a general technique for traversing a graphA BFS traversal of a graph G
Visits all the vertices and edges of G
Determines whether G is connected
Computes the connected components of G
Computes a spanning forest of G
BFS on a graph with n vertices and m edges takes O(nm ) timeBFS can be further extended to solve other graph problems
Find and report a path with the minimum number of edges between two given vertices
Find a simple cycle, if there is one
73
BFS AlgorithmThe algorithm uses a mechanism for setting and getting “labels” of vertices and edges
Algorithm BFS(G, s)L0 new empty sequenceL0.insertLast(s)setLabel(s, VISITED)i 0 while Li.isEmpty()
Li 1 new empty sequence for all v Li.elements()
for all e G.incidentEdges(v) if getLabel(e) UNEXPLORED
w opposite(v,e)if getLabel(w)
UNEXPLOREDsetLabel(e, DISCOVERY)setLabel(w, VISITED)Li 1.insertLast(w)
elsesetLabel(e, CROSS)
i i 1
Algorithm BFS(G)Input graph GOutput labeling of the edges
and partition of the vertices of G
for all u G.vertices()setLabel(u, UNEXPLORED)
for all e G.edges()setLabel(e, UNEXPLORED)
for all v G.vertices()if getLabel(v)
UNEXPLORED
BFS(G, v)
74
Example
CB
A
E
D
discovery edgecross edge
A visited vertex
A unexplored vertex
unexplored edge
L0
L1
F
CB
A
E
D
L0
L1
F
CB
A
E
D
L0
L1
F
75
Example (cont.)
CB
A
E
D
L0
L1
F
CB
A
E
D
L0
L1
FL2
CB
A
E
D
L0
L1
FL2
CB
A
E
D
L0
L1
FL2
76
Example (cont.)
CB
A
E
D
L0
L1
FL2
CB
A
E
D
L0
L1
FL2
CB
A
E
D
L0
L1
FL2
77
PropertiesNotation
Gs: connected component of sProperty 1
BFS(G, s) visits all the vertices and edges of Gs
Property 2The discovery edges labeled by BFS(G, s) form a spanning tree Ts of Gs
Property 3For each vertex v in Li
The path of Ts from s to v has i edges
Every path from s to v in Gs has at least i edges
CB
A
E
D
L0
L1
FL2
CB
A
E
D
F
78
AnalysisSetting/getting a vertex/edge label takes O(1) timeEach vertex is labeled twice once as UNEXPLORED once as VISITED
Each edge is labeled twice once as UNEXPLORED once as DISCOVERY or CROSS
Each vertex is inserted once into a sequence Li Method incidentEdges is called once for each vertexBFS runs in O(n m) time provided the graph is represented by the adjacency list structure Recall that v deg(v) 2m
79
Applications
We can specialize the BFS traversal of a graph G to solve the following problems in O(n m) time Compute the connected components of G Compute a spanning forest of G Find a simple cycle in G, or report that G is a
forest Given two vertices of G, find a path in G
between them with the minimum number of edges, or report that no such path exists
80
DFS vs. BFS
CB
A
E
D
L0
L1
FL2
CB
A
E
D
F
DFS BFS
Applications DFS BFS
Spanning forest, connected components, paths, cycles
Shortest paths
Biconnected components
81
DFS vs. BFS (cont.)
Back edge (v,w) w is an ancestor of v in
the tree of discovery edges
Cross edge (v,w) w is in the same level as
v or in the next level in the tree of discovery edges
CB
A
E
D
L0
L1
FL2
CB
A
E
D
F
DFS BFS
Directed Graphs
JFK
BOS
MIA
ORD
LAXDFW
SFO
83
Outline and Reading (§6.4)
Reachability (§6.4.1) Directed DFS Strong connectivity
Transitive closure (§6.4.2) The Floyd-Warshall Algorithm
Directed Acyclic Graphs (DAG’s) (§6.4.4) Topological Sorting
84
Digraphs
A digraph is a graph whose edges are all directed Short for “directed
graph”Applications one-way streets flights task scheduling
A
C
E
B
D
85
Digraph Properties
A graph G=(V,E) such that Each edge goes in one direction:
Edge (a,b) goes from a to b, but not b to a.
If G is simple, m < n(n-1).If we keep in-edges and out-edges in separate adjacency lists, we can perform listing of of the sets of in-edges and out-edges in time proportional to their size.
A
C
E
B
D
86
Digraph ApplicationScheduling: edge (a,b) means task a must be completed before b can be started
The good life
ics141ics131 ics121
ics53 ics52ics51
ics23ics22ics21
ics161
ics151
ics171
87
Directed DFSWe can specialize the traversal algorithms (DFS and BFS) to digraphs by traversing edges only along their directionIn the directed DFS algorithm, we have four types of edges discovery edges back edges forward edges cross edges
A directed DFS starting at a vertex s determines the vertices reachable from s
A
C
E
B
D
88
Reachability
DFS tree rooted at v: vertices reachable from v via directed paths
A
C
E
B
D
FA
C
E D
A
C
E
B
D
F
89
Strong Connectivity
Each vertex can reach all other vertices
a
d
c
b
e
f
g
90
Pick a vertex v in G.Perform a DFS from v in G. If there’s a w not visited,
print “no”.Let G’ be G with edges reversed.Perform a DFS from v in G’. If there’s a w not visited,
print “no”. Else, print “yes”.
Running time: O(n+m).
Strong Connectivity Algorithm
G:
G’:
a
d
c
b
e
f
g
a
d
c
b
e
f
g
91
Maximal subgraphs such that each vertex can reach all other vertices in the subgraphCan also be done in O(n+m) time using DFS, but is more complicated (similar to biconnectivity).
Strongly Connected Components
{ a , c , g }
{ f , d , e , b }
a
d
c
b
e
f
g
92
Transitive ClosureGiven a digraph G, the transitive closure of G is the digraph G* such that G* has the same
vertices as G if G has a directed path
from u to v (u v), G* has a directed edge from u to v
The transitive closure provides reachability information about a digraph
B
A
D
C
E
B
A
D
C
E
G
G*
93
Computing the Transitive Closure
We can perform DFS starting at each vertex
O(n(n+m))
If there's a way to get from A to B and from B to C, then there's a way to get from A to C.
Alternatively ... Use dynamic programming: the Floyd-Warshall Algorithm
94
Floyd-Warshall Transitive Closure
Idea #1: Number the vertices 1, 2, …, n.Idea #2: Consider paths that use only vertices numbered 1, 2, …, k, as intermediate vertices:
k
j
i
Uses only verticesnumbered 1,…,k-1 Uses only vertices
numbered 1,…,k-1
Uses only vertices numbered 1,…,k(add this edge if it’s not already in)
95
Floyd-Warshall’s AlgorithmFloyd-Warshall’s algorithm numbers the vertices of G as v1 , …, vn and computes a series of digraphs G0, …, Gn
G0=G Gk has a directed edge
(vi, vj) if G has a directed path from vi to vj with intermediate vertices in the set {v1 , …, vk}
We have that Gn = G*
In phase k, digraph Gk is computed from Gk 1
Running time: O(n3), assuming areAdjacent is O(1) (e.g., adjacency matrix)
Algorithm FloydWarshall(G)Input digraph GOutput transitive closure G* of Gi 1for all v G.vertices()
denote v as vi
i i + 1G0 Gfor k 1 to n do
Gk Gk 1
for i 1 to n (i k) dofor j 1 to n (j i, k) do
if Gk 1.areAdjacent(vi, vk) Gk 1.areAdjacent(vk, vj)
if Gk.areAdjacent(vi, vj) Gk.insertDirectedEdge(vi,
vj , k)return Gn
96
Floyd-Warshall Example
JFK
BOS
MIA
ORD
LAXDFW
SFO
v2
v1v3
v4
v5
v6
v7
97
Floyd-Warshall, Iteration 1
JFK
BOS
MIA
ORD
LAXDFW
SFO
v2
v1v3
v4
v5
v6
v7
98
Floyd-Warshall, Iteration 2
JFK
BOS
MIA
ORD
LAXDFW
SFO
v2
v1v3
v4
v5
v6
v7
99
Floyd-Warshall, Iteration 3
JFK
BOS
MIA
ORD
LAXDFW
SFO
v2
v1v3
v4
v5
v6
v7
100
Floyd-Warshall, Iteration 4
JFK
BOS
MIA
ORD
LAXDFW
SFO
v2
v1v3
v4
v5
v6
v7
101
Floyd-Warshall, Iteration 5
JFK
MIA
ORD
LAXDFW
SFO
v2
v1v3
v4
v5
v6
v7
BOS
102
Floyd-Warshall, Iteration 6
JFK
MIA
ORD
LAXDFW
SFO
v2
v1v3
v4
v5
v6
v7
BOS
103
Floyd-Warshall, Conclusion
JFK
MIA
ORD
LAXDFW
SFO
v2
v1v3
v4
v5
v6
v7
BOS
104
DAGs and Topological OrderingA directed acyclic graph (DAG) is a digraph that has no directed cyclesA topological ordering of a digraph is a numbering
v1 , …, vn
of the vertices such that for every edge (vi , vj), we have i j
Example: in a task scheduling digraph, a topological ordering a task sequence that satisfies the precedence constraints
TheoremA digraph admits a topological ordering if and only if it is a DAG
B
A
D
C
E
DAG G
B
A
D
C
E
Topological ordering of
G
v1
v2
v3
v4 v5
105
write c.s. program
play
Topological Sorting
Number vertices, so that (u,v) in E implies u < v
wake up
eat
nap
study computer sci.
more c.s.
work out
sleep
dream about graphs
A typical student day1
2 3
4 5
6
7
8
9
1011
make cookies for professors
106
Note: This algorithm is different than the one in Goodrich-Tamassia
Running time: O(n + m). How…?
Algorithm for Topological Sorting
Method TopologicalSort(G) H G // Temporary copy of G n G.numVertices() while H is not empty do
Let v be a vertex with no outgoing edgesLabel v nn n - 1Remove v from H
107
Topological Sorting Algorithm using DFS
Simulate the algorithm by using depth-first search
O(n+m) time.
Algorithm topologicalDFS(G, v)Input graph G and a start vertex v of G Output labeling of the vertices of G
in the connected component of v setLabel(v, VISITED)for all e G.incidentEdges(v)
if getLabel(e) UNEXPLORED
w opposite(v,e)if getLabel(w)
UNEXPLOREDsetLabel(e, DISCOVERY)topologicalDFS(G, w)
else{e is a forward or cross edge}
Label v with topological number n n n - 1
Algorithm topologicalDFS(G)Input dag GOutput topological ordering of G
n G.numVertices()for all u G.vertices()
setLabel(u, UNEXPLORED)for all e G.edges()
setLabel(e, UNEXPLORED)for all v G.vertices()
if getLabel(v) UNEXPLORED
topologicalDFS(G, v)
108
Topological Sorting Example
109
Topological Sorting Example
9
110
Topological Sorting Example
8
9
111
Topological Sorting Example
78
9
112
Topological Sorting Example
78
6
9
113
Topological Sorting Example
78
56
9
114
Topological Sorting Example
7
4
8
56
9
115
Topological Sorting Example
7
4
8
56
3
9
116
Topological Sorting Example
2
7
4
8
56
3
9
117
Topological Sorting Example
2
7
4
8
56
1
3
9
Campus Tour
119
Outline and Reading
Review Adjacency matrix structure (§6.2.3) Kruskal’s MST algorithm (§7.3.1)
Partition ADT and implementation (§4.2.2)The decorator pattern (§6.5.1)The traveling salesperson problem Definition Approximation algorithm (§13.4.3)
120
Graph Assignment
Goals Learn and implement the adjacency matrix
structure an Kruskal’s minimum spanning tree algorithm
Understand and use the decorator pattern and various JDSL classes and interfaces
Our task Implement the adjacency matrix structure for
representing a graph Implement Kruskal’s MST algorithm
Frontend Computation and visualization of an
approximate traveling salesperson tour
121
Adjacency Matrix StructureEdge list structureAugmented vertex objects Integer key
(index) associated with vertex
2D-array adjacency array Reference to
edge object for adjacent vertices
Null for non nonadjacent vertices
u
v
w
a b
0 1 2
0
1
2 a
u v w0 1 2
b
122
Kruskal’s AlgorithmThe vertices are partitioned into clouds
We start with one cloud per vertex
Clouds are merged during the execution of the algorithm
Partition ADT: makeSet(o): create set
{o} and return a locator for object o
find(l): return the set of the object with locator l
union(A,B): merge sets A and B
Algorithm KruskalMSF(G)Input weighted graph GOutput labeling of the edges of a
minimum spanning forest of G
Q new heap-based priority queuefor all v G.vertices() do
l makeSet(v) { elementary cloud }setLocator(v,l)
for all e G.edges() doQ.insert(weight(e), e)
while Q.isEmpty()e Q.removeMin()
[u,v] G.endVertices(e)A find(getLocator(u))B find(getLocator(v)) if A B
setMSFedge(e){ merge clouds }union(A, B)
123
Example
BG
C
A
F
D
4
1 35
10
2
8
7
6E
H11
9
BG
C
A
F
D
4
1 35
10
2
8
7
6E
H11
9
BG
C
A
F
D
4
1 35
10
2
8
7
6E
H11
9
BG
C
A
F
D
4
1 35
10
2
8
7
6E
H11
9
124
Example (contd.)
four steps
two
step
s
BG
C
A
F
D
4
1 35
10
2
8
7
6E
H11
9
BG
C
A
F
D
4
1 35
10
2
8
7
6E
H11
9
BG
C
A
F
D
4
1 35
10
2
8
7
6E
H11
9
BG
C
A
F
D
4
1 35
10
2
8
7
6E
H11
9
125
Partition ImplementationPartition implementation
A set is represented the sequence of its elements
A position stores a reference back to the sequence itself (for operation find)
The position of an element in the sequence serves as locator for the element in the set
In operation union, we move the elements of the smaller sequence into to the larger sequence
Worst-case running times makeSet, find: O(1) union: O(min(nA, nB))
Amortized analysis Consider a series of k
Partiton ADT operations that includes n makeSet operations
Each time we move an element into a new sequence, the size of its set at least doubles
An element is moved at most log2 n times
Moving an element takes O(1) time
The total time for the series of operations is O(k n log n)
126
Analysis of Kruskal’s AlgorithmGraph operations Methods vertices and edges are called once Method endVertices is called m times
Priority queue operations We perform m insert operations and m removeMin
operationsPartition operations We perform n makeSet operations, 2m find
operations and no more than n 1 union operations Label operations We set vertex labels n times and get them 2m
times Kruskal’s algorithm runs in time O((n m) log n) time provided the graph has no parallel edges and is represented by the adjacency list structure
127
Decorator Pattern
Labels are commonly used in graph algorithms
Auxiliary data Output
Examples DFS: unexplored/visited
label for vertices and unexplored/ forward/back labels for edges
Dijkstra and Prim-Jarnik: distance, locator, and parent labels for vertices
Kruskal: locator label for vertices and MSF label for edges
The decorator pattern extends the methods of the Position ADT to support the handling of attributes (labels)
has(a): tests whether the position has attribute a
get(a): returns the value of attribute a
set(a, x): sets to x the value of attribute a
destroy(a): removes attribute a and its associated value (for cleanup purposes)
The decorator pattern can be implemented by storing a dictionary of (attribute, value) items at each position
128
Traveling Salesperson Problem
A tour of a graph is a spanning cycle (e.g., a cycle that goes through all the vertices)A traveling salesperson tour of a weighted graph is a tour that is simple (i.e., no repeated vertices or edges) and has has minimum weightNo polynomial-time algorithms are known for computing traveling salesperson toursThe traveling salesperson problem (TSP) is a major open problem in computer science
Find a polynomial-time algorithm computing a traveling salesperson tour or prove that none exists
BD
C
A
F
E
74
28
5
3
2
6
1
Example of travelingsalesperson tour(with weight 17)
129
TSP ApproximationWe can approximate a TSP tour with a tour of at most twice the weight for the case of Euclidean graphs
Vertices are points in the plane
Every pair of vertices is connected by an edge
The weight of an edge is the length of the segment joining the points
Approximation algorithm Compute a minimum
spanning tree Form an Eulerian circuit
around the MST Transform the circuit into a
tour