graph - University of California, Davislrademac/Sp16_2331/graph.pdfDefinition. A graph is connected...

30
CSE 2331 Graph Algorithms 8.1

Transcript of graph - University of California, Davislrademac/Sp16_2331/graph.pdfDefinition. A graph is connected...

CSE 2331

Graph Algorithms

8.1

CSE 2331

Graph

Graph G

G.V = Set of vertices of graph G.

G.E = Set of edges of graph G.

(vi, vj) = edge with endpoints vi and vj .

Vertices vi ∈ G.V and vj ∈ G.V are incident on edge (ei, ej) ∈ G.E.

8.2

CSE 2331

Vertex Degree

deg(vi) = degree of vi = # edges incident on vi.

What is the degree of each vertex?

v1

}}}}

}}}}

}

BBBB

BBBB

B

v2

}}}}

}}}}

}

BBBB

BBBB

Bv3

}}}}

}}}}

}

v4 v5

8.3

CSE 2331

Sum of deg(vi)

m = number of graph edges.

Proposition:∑

vi∈V deg(vi) = 2m.

Proof 1:

∑vi∈V deg(vi) = sum of # edges incident on vertices

= sum of # vertices incident on edges

= 2× (# edges) = 2m.

Proof 2: Let δij = 1 if ej is incident on vi and 0 otherwise.∑

vi∈V

deg(vi) =∑

vi∈V

ej∈E

δij =∑

ej∈E

vi∈V

δij =∑

ej∈E

2 = 2m.

8.4

CSE 2331

Graph Representation

v1

oooooooOOOOOOO

v2

oooooooOOOOOOO v3

ooooooo

v4 v5

Adjacency matrix: Adjacency lists:

v1 v2 v3 v4 v5

v1 :

v2 :

v3 :

v4 :

v5 :

2

6

6

6

6

4

0 1 1 0 0

1 0 1 1 1

1 1 0 0 1

0 1 0 0 0

0 1 1 0 0

3

7

7

7

7

5

v1 : (v2, v3)

v2 : (v1, v3, v4, v5)

v3 : (v1, v2, v5)

v4 : (v2)

v5 : (v2, v3)

A[i, j] = 1 if (vi, vj) is an edge. V [i].degree = size of adj list.

V [i].AdjList[k] =

k’th element of the adjacency list.

8.5

CSE 2331

Sample Graph Algorithm

Input : Graph G represented by adjacency lists.

Func(G)

1 k ← 0;

2 foreach vertex vi in G.V do /* G.V = vertices of G */3 foreach edge (vi, vj) incident on vi do

4 k ← k + 1;

5 end

6 end

7 return (k);

8.6

CSE 2331

Connected Graphs

Definition. A path in a graph is a sequence of vertices

(w1, w2, . . . , wk) such that there is an edge (wi, wi+1) between

every two adjacent vertices in the sequence.

Definition. A graph is connected if for every two vertices

v, w ∈ G.V , the graph has some path from v to w.

Is the following graph connected?

v1

uuuuuu

uu

IIIIII

IIv2

uuuuuu

uuv6

����

����

����

v3

IIIIII

IIv4 v5

v7 v8 v9

8.7

CSE 2331

Connected Graphs

Is the following graph connected?

v12 v1

v11 v2

��������������������

�����������������������

v10

zzzzzzzzzzzz v3

ppppppppppppppppppppppppp

fffffffffffffffffffffffff

WWWWWWWWWWWWWWWWWWWWWW

v9 v4

v8 v5

NNNNNNNNNNNNNNNNNNNNNNNNN

v7 v6

8.8

CSE 2331

Connected Graphs

Is the following graph connected?

v12 v1

v11 v2

��������������������

�����������������������

v10

zzzzzzzzzzzz v3

ppppppppppppppppppppppppp

fffffffffffffffffffffffff

WWWWWWWWWWWWWWWWWWWWWW

v9 v4

v8 v5

v7 v6

8.9

CSE 2331

Query Connected: Depth First Search

procedure QueryConnected(G)

1 foreach vertex vi in G.V do /* G.V = vertices of G */

2 vi.mark← NotVisited;

3 end

4 DFS(G,1);

5 foreach vertex vi in G.V do

6 if (vi.mark = NotVisited) then return false;

7 end

8 return true;

8.10

CSE 2331

Depth First Search

procedure DFS(G, i)

/* Depth first search from vertex vi */

1 G.V[i].mark← Visited;

2 foreach edge (i, j) incident on vertex i do

3 if (G.V[j].mark = NotVisited()) then

4 DFS (G,j);

5 end

6 end

8.11

CSE 2331

Depth First Search Tree

procedure DFStree(G, i)

/* Depth first search from vertex vi */

1 G.V[i].mark← Visited;

2 foreach edge (i, j) incident on vertex i do

3 if (G.V[j].mark = NotVisited()) then

4 G.V[j].parent← i;

5 DFStree (G,j);

6 end

7 end

8.12

CSE 2331

Example

v8 v1

????

????

���������������������

oooooooooooooo

v7 v2

��������������

v6

��������������

v3

??????????????????

v5

//////////////

v4

8.13

CSE 2331

Directed Graphs

8.14

CSE 2331

Directed Graph Representation

v1

''OOOOOOO

wwooooooo

v2

wwooooooo''OOOOOOO v3

oo}}

v4 v5

==

Adjacency matrix: Adjacency lists:

v1 v2 v3 v4 v5

v1 :

v2 :

v3 :

v4 :

v5 :

2

6

6

6

6

4

0 1 1 0 0

0 0 0 1 1

0 1 0 0 1

0 0 0 0 0

0 0 1 0 0

3

7

7

7

7

5

v1 out : (v2, v3)

v2 out : (v4, v5)

v3 out : (v2, v5)

v4 out : ()

v5 out : (v3)

v1 in : ()

v2 in : (v1, v3)

v3 in : (v1, v5)

v4 in : (v2)

v5 in : (v2, v3)

A[i, j] = 1 if (vi, vj) is an edge.

8.15

CSE 2331

Sum of outdeg(vi) and sum of indeg(vi)

m = number of graph edges.

Proposition:∑

vi∈G.V outdeg(vi) = m.

Proposition:∑

vi∈G.V indeg(vi) = m.

8.16

CSE 2331

Sample Graph Algorithm

Input : Directed graph G represented by adjacency lists.

Func(G)

1 k ← 0;

2 foreach vertex vi in G.V do /* G.V = vertices of G */3 foreach directed edge (vi, vj) incident on vi do

4 k ← k + 1;

5 end

6 end

7 return (k);

8.17

CSE 2331

Directed Graph

How many vertices are reachable by a directed path from v1?

v12

��)))

))))

))))

))))

))))

))))

��������������������

v1

��111

1111

1111

1111

wwoooooooooooooooooov11

++WWWWWWWWWWWWWWWWWWWWWWv2

wwppppppppppppppppppppppppp

v10

��

v3

~~}}}}

}}}}

}}}}

}}}}

}}}}

ffMMMMMMMMMMMMMMMM

v9

++WWWWWWWWWWWWWWWWWWWWWWv4

ssgggggggggggggggggggggg

v8

>>|||||||||||||||||||||||||

v5

OO

v7

JJ�����������������������

UU********************

OO

v6

88pppp

8.18

CSE 2331

Directed Graph

How many vertices are reachable by a directed path from v12?

v12

��)))

))))

))))

))))

))))

))))

��������������������

v1

��111

1111

1111

1111

wwoooooooooooooooooov11

++WWWWWWWWWWWWWWWWWWWWWWv2

wwppppppppppppppppppppppppp

v10

��

v3

~~}}}}

}}}}

}}}}

}}}}

}}}}

ffMMMMMMMMMMMMMMMM

v9

++WWWWWWWWWWWWWWWWWWWWWWv4

ssgggggggggggggggggggggg

v8

>>|||||||||||||||||||||||||

v5

OO

v7

JJ�����������������������

UU********************

OO

v6

88pppp

8.19

CSE 2331

Num Reachable: Depth First Search

procedure NumReachable(G, k)

1 foreach vertex vi in G.V do /* G.V = vertices of G */2 vi.mark← NotVisited;

3 end

4 DirectedDFS(G,k);

5 count← 0;

6 foreach vertex vi in G.V do

7 if (vi.mark = Visited) then count← count + 1;

8 end

9 return count;

8.20

CSE 2331

Directed Depth First Search

procedure DirectedDFS(G, i)

/* Depth first search from vertex vi */

1 G.V[i].mark← Visited;

2 foreach directed edge (i, j) incident on vertex i do

3 if (G.V[j].mark = NotVisited()) then

4 DFS (G,j);

5 end

6 end

8.21

CSE 2331

Is Reachable?

Is vertex v12 reachable by a directed path from vertex v1?

v12

��222

2222

2222

2222

2222

2222

��

v1

��111

1111

1111

1111

��

v11

++WWWWWWWWWWWWWWWWWWWWWWv2

wwppppppppppppppppppppppppp

v10

77oooooooooooooooooo

��

v3

��

ffMMMMMMMMMMMMMMMM

v9

++WWWWWWWWWWWWWWWWWWWWWWv4

ssgggggggggggggggggggggg

v8

>>|||||||||||||||||||||||||

v5

OO

v7

88qqqqqqqqqqqqqqqq

UU********************

v6

bbDDDDDDDDDDDDDDDDDDDDDD

8.22

CSE 2331

Is Reachable?

Is vertex v1 reachable by a directed path from vertex v12?

v12

��222

2222

2222

2222

2222

2222

��

v1

��111

1111

1111

1111

��

v11

++WWWWWWWWWWWWWWWWWWWWWWv2

wwppppppppppppppppppppppppp

v10

77oooooooooooooooooo

��

v3

��

ffMMMMMMMMMMMMMMMM

v9

++WWWWWWWWWWWWWWWWWWWWWWv4

ssgggggggggggggggggggggg

v8

>>|||||||||||||||||||||||||

v5

OO

v7

88qqqqqqqqqqqqqqqq

UU********************

v6

bbDDDDDDDDDDDDDDDDDDDDDD

8.23

CSE 2331

Is Reachable: Depth First Search

procedure IsReachable(G, k, q)

1 foreach vertex vi in G.V do /* G.V = vertices of G */2 vi.mark← NotVisited;

3 end

4 DirectedDFS(G,k);

5 if (vq.mark = Visited) then return true;

6 else return false;

8.24

CSE 2331

Topological Sort

8.25

CSE 2331

Directed Acylic Graph (DAG)

A directed graph with no cycles is called a directed acyclic

graph or DAG.

v1

''NNNNNNNNNN

��

v6 v2

v5

@@�������������

33gggggggggggggggggggg

OO

v3

wwpppppppppp

kkWWWWWWWWWWWWWWWWWWWW

v4

8.26

CSE 2331

Topological Sort

Sort vertices of a directed acyclic graph so that for every edge (vi, vj),

vertex vi precedes vj .v1

''NNNNNNNNN

��

v6 v2

v5

@@������������

33gggggggggggggggggg

OO

v3

wwppppppppp

kkWWWWWWWWWWWWWWWWWW

v4

v5

$$

77 88v3//

''v6 v1

//$$

v4 v2

8.27

CSE 2331

Topological Sort: Example

v12

��������������������uukkkkkk

v1

��111

1111

1111

1111

||zzzz

zzzz

zzzz

zzzz

zzzz

zzv11

�������

v2

��000

00

�������������������������

v10

33gggggggggggggggggggggg

""DDDD

DDDD

DDDD

DDDD

DDDD

DDv3

��

v9

OO

v4

xxqqqqqqqqqqqqqqqq

v8 ))SSSSSSv5xxpppp

kkWWWWWWWWWWWWWWWWWWWWWW

YY22222222222222222222222

v7 v6

8.28

CSE 2331

Topological Sort

procedure TopologicalSort(G)

/* Report vertices of G in topologically sorted order */

1 foreach vertex vi in G.V do/* S is a stack of vertices. */

2 if (indeg(vi) = 0) then S.Push(vi);

3 end

4 while (S is not empty) do5 vi ← S.Pop();

6 Report vi;

7 foreach edge (vi, vj) incident on vi do8 Delete (vi, vj) from G;

9 if (indeg(vj) = 0) then S.Push(vj);

10 end

11 end

8.29

CSE 2331

Topological Sort: Simplified Implementation

procedure TopologicalSort(G)

/* Report vertices of G in topologically sorted order */

1 foreach vertex vi in G.V do/* S is a stack of vertices. */

2 inCount[vi]← indeg(vi);

3 if (inCount[vi] = 0) then S.Push(vi);

4 end

5 while (S is not empty) do6 vi ← S.Pop();

7 Report vi;

8 foreach edge (vi, vj) incident on vi do9 inCount[vj ]← inCount[vj ]− 1;

10 if (inCount[vj ] = 0) then S.Push(vj);

11 end

12 end

8.30