graphs

129
Graphs ORD DFW SFO LAX 8 0 2 1743 1843 1233 3 3 7

Upload: jacqui

Post on 08-Jan-2016

35 views

Category:

Documents


1 download

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 Presentation

TRANSCRIPT

Page 1: Graphs

Graphs

ORD

DFW

SFO

LAX

802

1743

1843

1233

337

Page 2: Graphs

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

Page 3: Graphs

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

Page 4: Graphs

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

Page 5: Graphs

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.

Page 6: Graphs

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?

Page 7: Graphs

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

Page 8: Graphs

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

Page 9: Graphs

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

Page 10: Graphs

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

Page 11: Graphs

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

Page 12: Graphs

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

Page 13: Graphs

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

Page 14: Graphs

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

Page 15: Graphs

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)

Page 16: Graphs

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.

Page 17: Graphs

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.

Page 18: Graphs

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)

Page 19: Graphs

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

Page 20: Graphs

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

Page 21: Graphs

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.

Page 22: Graphs

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

Page 23: Graphs

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.

Page 24: Graphs

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

Page 25: Graphs

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.

Page 26: Graphs

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

Page 27: Graphs

Depth-First Search

DB

A

C

E

Page 28: Graphs

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

Page 29: Graphs

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

Page 30: Graphs

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

Page 31: Graphs

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

Page 32: Graphs

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

Page 33: Graphs

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).

Page 34: Graphs

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

Page 35: Graphs

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.

Page 36: Graphs

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.

Page 37: Graphs

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

Page 38: Graphs

38

Example (cont.)

DB

A

C

E

DB

A

C

E

DB

A

C

E

DB

A

C

E

Page 39: Graphs

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)

Page 40: Graphs

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

Page 41: Graphs

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

Page 42: Graphs

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

Page 43: Graphs

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

Page 44: Graphs

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

Page 45: Graphs

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

Page 46: Graphs

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

Page 47: Graphs

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

Page 48: Graphs

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

Page 49: Graphs

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

Page 50: Graphs

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.

Page 51: Graphs

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)

Page 52: Graphs

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

Page 53: Graphs

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

Page 54: Graphs

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 }

Page 55: Graphs

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()

Page 56: Graphs

Biconnectivity

SEA PVD

MIASNA

ORDFCO

Page 57: Graphs

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

Page 58: Graphs

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

Page 59: Graphs

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

Page 60: Graphs

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

Page 61: Graphs

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

Page 62: Graphs

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)

Page 63: Graphs

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].

Page 64: Graphs

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

Page 65: Graphs

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

Page 66: Graphs

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

Page 67: Graphs

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

Page 68: Graphs

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

Page 69: Graphs

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

Page 70: Graphs

Breadth-First Search

CB

A

E

D

L0

L1

FL2

Page 71: Graphs

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

Page 72: Graphs

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

Page 73: Graphs

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)

Page 74: Graphs

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

Page 75: Graphs

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

Page 76: Graphs

76

Example (cont.)

CB

A

E

D

L0

L1

FL2

CB

A

E

D

L0

L1

FL2

CB

A

E

D

L0

L1

FL2

Page 77: Graphs

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

Page 78: Graphs

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

Page 79: Graphs

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

Page 80: Graphs

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

Page 81: Graphs

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

Page 82: Graphs

Directed Graphs

JFK

BOS

MIA

ORD

LAXDFW

SFO

Page 83: Graphs

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

Page 84: Graphs

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

Page 85: Graphs

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

Page 86: Graphs

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

Page 87: Graphs

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

Page 88: Graphs

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

Page 89: Graphs

89

Strong Connectivity

Each vertex can reach all other vertices

a

d

c

b

e

f

g

Page 90: Graphs

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

Page 91: Graphs

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

Page 92: Graphs

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*

Page 93: Graphs

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

Page 94: Graphs

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)

Page 95: Graphs

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

Page 96: Graphs

96

Floyd-Warshall Example

JFK

BOS

MIA

ORD

LAXDFW

SFO

v2

v1v3

v4

v5

v6

v7

Page 97: Graphs

97

Floyd-Warshall, Iteration 1

JFK

BOS

MIA

ORD

LAXDFW

SFO

v2

v1v3

v4

v5

v6

v7

Page 98: Graphs

98

Floyd-Warshall, Iteration 2

JFK

BOS

MIA

ORD

LAXDFW

SFO

v2

v1v3

v4

v5

v6

v7

Page 99: Graphs

99

Floyd-Warshall, Iteration 3

JFK

BOS

MIA

ORD

LAXDFW

SFO

v2

v1v3

v4

v5

v6

v7

Page 100: Graphs

100

Floyd-Warshall, Iteration 4

JFK

BOS

MIA

ORD

LAXDFW

SFO

v2

v1v3

v4

v5

v6

v7

Page 101: Graphs

101

Floyd-Warshall, Iteration 5

JFK

MIA

ORD

LAXDFW

SFO

v2

v1v3

v4

v5

v6

v7

BOS

Page 102: Graphs

102

Floyd-Warshall, Iteration 6

JFK

MIA

ORD

LAXDFW

SFO

v2

v1v3

v4

v5

v6

v7

BOS

Page 103: Graphs

103

Floyd-Warshall, Conclusion

JFK

MIA

ORD

LAXDFW

SFO

v2

v1v3

v4

v5

v6

v7

BOS

Page 104: Graphs

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

Page 105: Graphs

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

Page 106: Graphs

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

Page 107: Graphs

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)

Page 108: Graphs

108

Topological Sorting Example

Page 109: Graphs

109

Topological Sorting Example

9

Page 110: Graphs

110

Topological Sorting Example

8

9

Page 111: Graphs

111

Topological Sorting Example

78

9

Page 112: Graphs

112

Topological Sorting Example

78

6

9

Page 113: Graphs

113

Topological Sorting Example

78

56

9

Page 114: Graphs

114

Topological Sorting Example

7

4

8

56

9

Page 115: Graphs

115

Topological Sorting Example

7

4

8

56

3

9

Page 116: Graphs

116

Topological Sorting Example

2

7

4

8

56

3

9

Page 117: Graphs

117

Topological Sorting Example

2

7

4

8

56

1

3

9

Page 118: Graphs

Campus Tour

Page 119: Graphs

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)

Page 120: Graphs

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

Page 121: Graphs

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

Page 122: Graphs

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)

Page 123: Graphs

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

Page 124: Graphs

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

Page 125: Graphs

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)

Page 126: Graphs

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

Page 127: Graphs

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

Page 128: Graphs

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)

Page 129: Graphs

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