definition famous problems on graphs · 5 depth-first search 1 2 3 5 9 13 14 15 14 16 10 11 12 6 7...

16
1 Graphs - I Principles of Imperative Computation V. Adamchik CS 15-122 Carnegie Mellon University The basic idea of graphs were introduced in 18th century by the great mathematician Leonhard Euler. He used graphs to solve the famous Königsberg bridge problem. Definition B A C D E A graph G is a pair (V,E) where V is a set of vertices (or nodes) E is a set of edges connecting the vertices Famous Problems on Graphs The Euler cycle (or tour) problem: Is it possible to traverse each of the edges of a graph exactly once, starting and ending at the same vertex? Famous Problems on Graphs The Hamiltonian cycle problem: Is it possible to traverse each of the vertices of a graph exactly once, starting and ending at the same vertex? Famous Problems on Graphs The Travelling salesman problem: Find the shortest path in a graph that visits each vertex at least once, starting and ending at the same vertex?

Upload: others

Post on 07-Jul-2020

4 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Definition Famous Problems on Graphs · 5 Depth-First Search 1 2 3 5 9 13 14 15 14 16 10 11 12 6 7 68 4 16 adj(15) adj(11) adj(7) adj(6) adj(5) STACK 1 2 3 4 5 6 7 8 9 10 11 12 13

1

Graphs - I

Principles of Imperative Computation

V. Adamchik CS 15-122

Carnegie Mellon University The basic idea of graphs were introduced in 18th century by the great mathematician Leonhard Euler. He used graphs to solve the famous Königsberg bridge problem.

Definition

B

A

C

D

E

A graph G is a pair (V,E) where V is a set of vertices (or nodes) E is a set of edges connecting the vertices

Famous Problems on Graphs

The Euler cycle (or tour) problem:

Is it possible to traverse each of the edges of a graph exactly once, starting and ending at the same vertex?

Famous Problems on Graphs

The Hamiltonian cycle problem: Is it possible to traverse each of the vertices of a graph exactly once, starting and ending at the same vertex?

Famous Problems on Graphs

The Travelling salesman problem: Find the shortest path in a graph that visits each vertex at least once, starting and ending at the same vertex?

Page 2: Definition Famous Problems on Graphs · 5 Depth-First Search 1 2 3 5 9 13 14 15 14 16 10 11 12 6 7 68 4 16 adj(15) adj(11) adj(7) adj(6) adj(5) STACK 1 2 3 4 5 6 7 8 9 10 11 12 13

2

Famous Problems on Graphs

The planar graph:

Is it possible to draw the edges of a graph in such a way that edges do not cross?

=

Famous Problems on Graphs

The four coloring problem:

Is it possible to color the vertices of a

planar graph with at most 4 colors such that

adjacent vertices get different color?

It was proven in 1976 by K. Appel

and W. Haken

Famous Problems on Graphs

The marriage problem (or bipartite perfect matching):

At what condition a set of boys will be marrying off to a set of girls such that each boy gets a girl he likes?

Adjacency List

or

Adjacency Matrix

Vertex X is adjacent to vertex Y if and only if there is an edge (X, Y) between them.

Representing Graphs

Adjacency List Representation

A

B

C

D

E

null

B

B

A A

C

C D

D

D E

E

E

Adjacency List Representation

It’s used for representation of the sparse graphs. The space complexity is O(V + E). Disadvantage? Figure out if two given vertices are adjacent.

Page 3: Definition Famous Problems on Graphs · 5 Depth-First Search 1 2 3 5 9 13 14 15 14 16 10 11 12 6 7 68 4 16 adj(15) adj(11) adj(7) adj(6) adj(5) STACK 1 2 3 4 5 6 7 8 9 10 11 12 13

3

Adjacency Matrix Representation

1

0

2 3

4

0 1 0 0 1 0 0 0 1 1 1 0 0 1 0 0 0 0 0 0

0 0 1 0 0

Adjacency Matrix Representation

It’s used for representation of the dense graphs. The space complexity is O(V2).

Graphs Traversal

Visiting all vertices in a systematic order.

for all v in V do visited[v] = false

for all v in V do if !visited[v] traversal(v)

traversal(v) {

visited[v] = true

for all w in adj(v)

do if !visited[w] traversal(w)

}

Graphs Traversals

Depth-First Search (DFS) Breadth-First Search (BFS)

DFS uses a stack for backtracking.

BFS uses a queue for bookkeeping

Perform a DFS on the following graph

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

5

STACK

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

F F F F T F F F F F F F F F F F

Depth-First Search

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

5

STACK

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

F F F F T F F F F F F F F F F F

6

1

9

Page 4: Definition Famous Problems on Graphs · 5 Depth-First Search 1 2 3 5 9 13 14 15 14 16 10 11 12 6 7 68 4 16 adj(15) adj(11) adj(7) adj(6) adj(5) STACK 1 2 3 4 5 6 7 8 9 10 11 12 13

4

Depth-First Search

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

adj(6)

6

1

9

STACK

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

F F F F T T F F F F F F F F F F

Depth-First Search

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

7

adj(6)

adj(5)

STACK

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

F F F F T T T F F F F F F F F F

Depth-First Search

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

8

adj(7)

adj(6)

adj(5)

STACK

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

F F F F T T T T F F F F F F F F

Depth-First Search

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

12

adj(7)

adj(6)

adj(5)

STACK

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

F F F F T T T T F F F T F F F F

Backtrack

to 8 and

then to 7

Depth-First Search

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

11

adj(7)

adj(6)

adj(5)

STACK

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

F F F F T T T T F F T T F F F F

Depth-First Search

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

15

adj(11)

adj(7)

adj(6)

adj(5)

STACK

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

F F F F T T T T F F T T F F T F

Page 5: Definition Famous Problems on Graphs · 5 Depth-First Search 1 2 3 5 9 13 14 15 14 16 10 11 12 6 7 68 4 16 adj(15) adj(11) adj(7) adj(6) adj(5) STACK 1 2 3 4 5 6 7 8 9 10 11 12 13

5

Depth-First Search

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

16

adj(15)

adj(11)

adj(7)

adj(6)

adj(5)

STACK

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

F F F F T T T T F F T T F F T T

Backtrack

to 15

Depth-First Search

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

14

adj(14)

adj(11)

adj(7)

adj(6)

adj(5)

STACK

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

F F F F T T T T F F T T F T T T

Depth-First Search

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

13

adj(13)

adj(14)

adj(11)

adj(7)

adj(6)

adj(5)

STACK

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

F F F F T T T T F F T T T T T T

Depth-First Search

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

9

adj(9)

adj(14)

adj(11)

adj(7)

adj(6)

adj(5)

STACK

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

F F F F T T T T T F T T T T T T

Depth-First Search

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

10

adj(9)

adj(14)

adj(11)

adj(7)

adj(6)

adj(5)

STACK

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

F F F F T T T T T T T T T T T T

Backtrack

to 6

Depth-First Search

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

2

adj(6)

adj(5)

STACK

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

F T F F T T T T T T T T T T T T

and so on…

Page 6: Definition Famous Problems on Graphs · 5 Depth-First Search 1 2 3 5 9 13 14 15 14 16 10 11 12 6 7 68 4 16 adj(15) adj(11) adj(7) adj(6) adj(5) STACK 1 2 3 4 5 6 7 8 9 10 11 12 13

6

Properties of DFS

Property 1

DFS visits all the vertices in the connected component

Property 2

The discovery edges labeled by DFS form a spanning tree of the connected component

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

Perform a BFS on the following graph

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

Breadth-First Search

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

T F F F T T F F T F F F F F F F

Breadth-First Search

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

T T F F T T T F T T F F T T F F

Breadth-First Search

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

T T T F T T T T T T T F T T T F

Breadth-First Search

1 2 3

5

9

13 14 15 16

10 11 12

6 7 8

4

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

T T T T T T T T T T T T T T T T

Page 7: Definition Famous Problems on Graphs · 5 Depth-First Search 1 2 3 5 9 13 14 15 14 16 10 11 12 6 7 68 4 16 adj(15) adj(11) adj(7) adj(6) adj(5) STACK 1 2 3 4 5 6 7 8 9 10 11 12 13

7

The complete graph on n vertices, denoted Kn, is a simple graph in which there is an edge between every pair of distinct vertices.

1) What is the height of the DFS

tree for the complete graph Kn?

2) What is the height of the BFS tree for the complete graph Kn?

Exercise Applications of DFS

• Determine the connected components of a graph

• Find a cycle in a graph

• Determine if a graph is bipartite.

• Topologically sort a directed graph

The Minimum Spanning Tree

Find a spanning tree of minimum total weight.

Boruvka’s Algorithm (1926)

Kruskal’s Algorithm (1956)

Prim's Algorithm (1957)

The Minimum Spanning Tree

Spanning tree is a subgraph

(connected and acyclic)

of a graph containing all

the vertices

Minimum spanning tree

(MST) is a spanning tree of

a weighted graph with

minimum total edge weight

ORD

PIT

ATL

STL

DEN

DFW

DCA

10 1

9

8

6

3

2 5

7

4

The weight of a spanning tree is the sum of the weights on all the edges which comprise the spanning tree.

The MST

Fred Hacker’s algorithm:

Using BFS, find ALL spanning trees and then pick one with the

minimum cost.

What’s wrong with this idea?

Page 8: Definition Famous Problems on Graphs · 5 Depth-First Search 1 2 3 5 9 13 14 15 14 16 10 11 12 6 7 68 4 16 adj(15) adj(11) adj(7) adj(6) adj(5) STACK 1 2 3 4 5 6 7 8 9 10 11 12 13

8

The number of labeled trees on n nodes is nn-2

The number of spanning trees

in Kn is nn-2

Cayley’s Formula

- Start with an arbitrary vertex as

component C

- Expand C by adding a vertex having the

minimum weight edge of the graph having

exactly one end point in C.

- Continue to grow the tree until C gets

all vertices.

Prim's Algorithm

algorithm builds a tree one VERTEX at a time.

First described by Jarnık in a 1929 letter

to Boruvka.

Rediscovered by Kruskal in 1956, by Prim in

1957, by Loberman and Weinberger in 1957,

and finally by Dijkstra in 1958.

Prim's Algorithm

algorithm builds a tree one VERTEX at a time. A cut of a graph is a partition of its vertices

into two disjoint sets. Yellow and green below.

Cut Property

b c

e f

d

a

1 4

7

3

1

2

8

5 2

A crossing edge is an

edge that connects a

vertex in one set with

a vertex in the other.

For example, (d,e) in the

picture

Lemma: Given any cut in a weighted graph , the crossing edge of minimum weight is in the MST of the graph.

Property of the MST

b c

e f

d

a

1 4

7

3

1

2

8

5 2

Among five crossing edges, (a,c) is the smallest, so it must be in the MST.

Proof of the Lemma

X

G-X

u v

e

Adding e to T creates a cycle.

e is the smallest edge

e is not in T

Let T be the MST && e (crossing edge) is not in T

Page 9: Definition Famous Problems on Graphs · 5 Depth-First Search 1 2 3 5 9 13 14 15 14 16 10 11 12 6 7 68 4 16 adj(15) adj(11) adj(7) adj(6) adj(5) STACK 1 2 3 4 5 6 7 8 9 10 11 12 13

9

Proof of the Lemma

X

G-X

u v

e

There is some other crossing edge f > e in T.

e is the smallest edge

e is not in T

f is in T

f > e f

Create anotherT1 =T –f + e < T

thus T is not the MST CONTRADICTION

Prim's Algorithm

b c

e f

d

a

1 4

7

3

1

2

8

5 2

C={a}

d-1 c-1 b-4 e-oo f-oo

heap

Prim's Algorithm

b c

e f

d

a

1 4

7

3

1

2

8

5 2

C={a,d}

c-1 b-4 e-oo f-oo

heap

Prim's Algorithm

b c

e f

d

a

1 4

7

3

1

2

8

5 2

C={a,d}

c-1 b-4 e-5 f-7

heap

decreaseKey

Prim's Algorithm

b c

e f

d

a

1 4

7

3

1

2

8

5 2

C={a,d,c}

b-4 e-5 f-7

heap

Prim's Algorithm

b c

e f

d

a

1 4

7

3

1

2

8

5 2

C={a,d,c}

b-2 e-2 f-7

heap

Page 10: Definition Famous Problems on Graphs · 5 Depth-First Search 1 2 3 5 9 13 14 15 14 16 10 11 12 6 7 68 4 16 adj(15) adj(11) adj(7) adj(6) adj(5) STACK 1 2 3 4 5 6 7 8 9 10 11 12 13

10

Prim's Algorithm

b c

e f

d

a

1 4

7

3

1

2

8

5 2

C={a,d,c,b}

e-2 f-7

heap

Prim's Algorithm

b c

e f

d

a

1 4

7

3

1

2

8

5 2

C={a,d,c,b}

e-2 f-7

heap

Prim's Algorithm

b c

e f

d

a

1 4

7

3

1

2

8

5 2

C={a,d,c,b,e}

f-3

heap

Prim's Algorithm

b c

e f

d

a

1 4

7

3

1

2

8

5 2

C={a,d,c,b,e,f}

Weight = 1+1+2+2+3 = 9

What is the worst-case

runtime complexity of

Prim's Algorithm?

To find a shortest distance to C, we

maintain a PQ of vertices

deleteMin – O(log V)

decreaseKey – O(log V)

Complexity of Prim's Algorithm

We run deleteMin V times

We update the queue E times

O(V*log V + E*log V)

Page 11: Definition Famous Problems on Graphs · 5 Depth-First Search 1 2 3 5 9 13 14 15 14 16 10 11 12 6 7 68 4 16 adj(15) adj(11) adj(7) adj(6) adj(5) STACK 1 2 3 4 5 6 7 8 9 10 11 12 13

11

- Start with all vertices as a forest

- Choose the cheapest edge and joint

correspondent vertices (subject to cycles)

- Continue to grow the forest

Kruskal's Algorithm

algorithm builds a tree one EDGE at a time.

Kruskal's Algorithm

Start with minimal weight edges. There are three edges of weight 1

1

8

2

6

7

5

9

4

3 4

4

2

5

8

1

9

6 3

11 3

7

2 2 8

1

8

5

6

1

Kruskal's Algorithm

There are two edges of weight 3

1

8

2

6

7

5

9

4

3 4

4

2

5

8

1

9

6 3

11 3

7

2 2 8

1

8

5

6

1

We maintain a heap of edges

Heap operations – O(E log E)

Union of clusters – O(V)

Kruskal's algorithm takes O(V*E + E*log E)

Complexity of Kruskal's Algorithm

Implementation of Kruskal's Algorithm

We need a new data structure:

a disjoint set

When examining an edge, we need to check if both vertices are in the same disjoint set:

if no, accept the edge and take the union of the two sets, otherwise

if yes, then this would cause a cycle

Disjoint Set

This data structure maintains

a partition, i.e., a collection of disjoint

sets, with the operations:

-find(u): return the set storing u

-union(u,v): replace the sets storing u

and v with their union

Page 12: Definition Famous Problems on Graphs · 5 Depth-First Search 1 2 3 5 9 13 14 15 14 16 10 11 12 6 7 68 4 16 adj(15) adj(11) adj(7) adj(6) adj(5) STACK 1 2 3 4 5 6 7 8 9 10 11 12 13

12

Disjoint Set

E F

B C

G

H

4

6

3

2

6

5

A D

I K

J

5

4 3

8

8

4 6

A B C D E F G H J I K

Disjoint Set

E F

B C

G

H

4

6

3

2

6

5

A D

I K

J

5

4 3

8

8

4 6

A B C D E F G H J I K

Disjoint Set

E F

B C

G

H

4

6

3

2

6

5

A D

I K

J

5

4 3

8

8

4 6

A B C D E F G H J I K

Disjoint Set

E F

B C

G

H

4

6

3

2

6

5

A D

I K

J

5

4 3

8

8

4 6

A B C D E F H G J I K

Disjoint Set

E F

B C

G

H

4

6

3

2

6

5

A D

I K

J

5

4 3

8

8

4 6

A B C D E F H G J I K

Disjoint Set

E F

B C

G

H

4

6

3

2

6

5

A D

I K

J

5

4 3

8

8

4 6

A B C D G E F H J I K

Page 13: Definition Famous Problems on Graphs · 5 Depth-First Search 1 2 3 5 9 13 14 15 14 16 10 11 12 6 7 68 4 16 adj(15) adj(11) adj(7) adj(6) adj(5) STACK 1 2 3 4 5 6 7 8 9 10 11 12 13

13

Disjoint Set

E F

B C

G

H

4

6

3

2

6

5

A D

I K

J

5

4 3

8

8

4 6

A B C D G E F H I J K

Disjoint Set

E F

B C

G

H

4

6

3

2

6

5

A D

I K

J

5

4 3

8

8

4 6

A B E F H I C D G J K

Disjoint Set

E F

B C

G

H

4

6

3

2

6

5

A D

I K

J

5

4 3

8

8

4 6

A B E F H I C D G J K

Disjoint Set

E F

B C

G

H

4

6

3

2

6

5

A D

I K

J

5

4 3

8

8

4 6

A B E F H I C D G J K

Disjoint Set

E F

B C

G

H

4

6

3

2

6

5

A D

I K

J

5

4 3

8

8

4 6

A B E F H I C D G J K

Disjoint Set

E F

B C

G

H

4

6

3

2

6

5

A D

I K

J

5

4 3

8

8

4 6

A B E F H I C D G J K

Page 14: Definition Famous Problems on Graphs · 5 Depth-First Search 1 2 3 5 9 13 14 15 14 16 10 11 12 6 7 68 4 16 adj(15) adj(11) adj(7) adj(6) adj(5) STACK 1 2 3 4 5 6 7 8 9 10 11 12 13

14

Union and Find

• MAKESET(x) - creates a new set containing a single element x.

• UNION(x, y) - joins two sets containing x and y together

• FIND(x) - returns the name of the set containing x.

Union - Find

We implement each set as a tree, using parent pointers. The root is a representative of all nodes in this tree. Find() means a tree traversal. Union() means joining two trees.

Union – Find: implementation FIND

FIND(4) returns the root, which is 5

1

3 4

2

5

UNION

UNION(4, 0) calls FIND(4) and FIND(0)

1

3 4

2

5

0 7

6

UNION

UNION(4, 0) calls FIND(4) and FIND(0)

1

3 4

2

5

0 7

6

Page 15: Definition Famous Problems on Graphs · 5 Depth-First Search 1 2 3 5 9 13 14 15 14 16 10 11 12 6 7 68 4 16 adj(15) adj(11) adj(7) adj(6) adj(5) STACK 1 2 3 4 5 6 7 8 9 10 11 12 13

15

UNION

UNION(4, 2) calls FIND(4) and FIND(2)

1

3 4

2

5

FIND: implementation

Vertex k has a parent that is stored at

parent[k]

1

3 4

2

5

0 1 2 3 4 5 6 7

-1 5 5 1 1 5 -1 -1

Array parent

FIND: implementation

Node k has a parent that is stored at

parent[k]

0 1 2 3 4 5 6 7

-1 5 5 1 1 5 -1 -1

Array parent

find(i):

while( i != parent[i] && parent[i] >= 0 )

i = parent[i];

return i;

UNION: implementation

0 1 2 3 4 5 6 7

6 5 5 1 1 5 6 6

1

3 4

2

5

0 7

6

UNION: implementation

0 1 2 3 4 5 6 7

6 5 5 1 1 5 5 6

1

3 4

2

5

0 7

6

Union by Rank

Maintain heights (called rank) of all trees.

During UNION, make a shorter tree a subset of a taller tree.

Page 16: Definition Famous Problems on Graphs · 5 Depth-First Search 1 2 3 5 9 13 14 15 14 16 10 11 12 6 7 68 4 16 adj(15) adj(11) adj(7) adj(6) adj(5) STACK 1 2 3 4 5 6 7 8 9 10 11 12 13

16

UNION: implementation

union(i,j):

root1 = find(i); root2 = find(j);

if(root1 != root2)

if(height(root1) > height(root2))

parent[root2] = root1;

else

parent[root1] = root2;

Worst-case Complexity

FIND has cost O(V)

UNION has cost O(V) + O(1)

Path Compression

The idea is to make the tree height smaller. During a FIND operation, we redirect all nodes on the path to point to the root.

1

3 4

2

5

1

3 4

2

5 O(log* V)

6 6

n Union/Find operations take O(n log*n) on average

log* n – iterated log

log*n is the number of times we need to apply log to get 1.

log*16 = 3 since log log log 16 = 1

log*(2^16) = 4

log*(2^65536) = 5