Depth First Search and Breadth First Search

Post on 13-Apr-2017

63 views 3 download

Transcript of Depth First Search and Breadth First Search

Data Structures and Algorithms – COMS21103

Representing and Exploring Graphs

Depth First Search and Breadth First Search

Benjamin Sach

Graph notation recap

G is a Graph,

Vertex

Edge

V is the set of vertices

E is the set of edges

|V | is the number of vertices

|E| is the number of edges

This lecture focuses on exploring undirected and unweighted graphs

1

3

5

2

4

6

8

7

9

v ∈ V is a vertex

(u, v) ∈ E is an edge from u to v

though everything discussed today will work for directed, unweighted graphs too

Graph notation recap

an undirected and unweighted graph an directed and unweighted graph

a directed and weighted graphan undirected and weighted graph

374

9

374

2

83

Graph notation recap

an undirected and unweighted graph an directed and unweighted graph

a directed and weighted graphan undirected and weighted graph

374

9

374

2

83

Today we’refocused on

these graphs

Graph notation recap

an undirected and unweighted graph an directed and unweighted graph

a directed and weighted graphan undirected and weighted graph

374

9

374

2

83

Today we’refocused on

these graphs

But it all works forthese graphs too

Graph representations

7

1

3

5

2

4

6

9

0 1 1 0 0 0 0 0 0

1 0 1 1 1 0 0 0 0

1 1 0 1 1 0 0 0 0

0 1 1 0 1 1 0 0 0

0 1 1 1 0 1 0 0 0

0 0 0 1 1 0 0 0 0

0 0 0 0 0 0 0 1 1

0 0 0 0 0 0 1 0 1

0 0 0 0 0 0 1 1 0

1

2

3

4

5

6

7

8

9

1 2 3 4 5 6 7 8 9

FRO

M

TO8

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Adjacency Matrix

|V |

|V |

We will in general assume that the vertices are numbered 1, 2, 3 . . . |V |

Graph representations

7

1

3

5

2

4

6

9

0 1 1 0 0 0 0 0 0

1 0 1 1 1 0 0 0 0

1 1 0 1 1 0 0 0 0

0 1 1 0 1 1 0 0 0

0 1 1 1 0 1 0 0 0

0 0 0 1 1 0 0 0 0

0 0 0 0 0 0 0 1 1

0 0 0 0 0 0 1 0 1

0 0 0 0 0 0 1 1 0

1

2

3

4

5

6

7

8

9

1 2 3 4 5 6 7 8 9

FRO

M

TO8

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Adjacency Matrix

|V |

|V |

We will in general assume that the vertices are numbered 1, 2, 3 . . . |V |

Graph representations

7

1

3

5

2

4

6

9

0 1 1 0 0 0 0 0 0

1 0 1 1 1 0 0 0 0

1 1 0 1 1 0 0 0 0

0 1 1 0 1 1 0 0 0

0 1 1 1 0 1 0 0 0

0 0 0 1 1 0 0 0 0

0 0 0 0 0 0 0 1 1

0 0 0 0 0 0 1 0 1

0 0 0 0 0 0 1 1 0

1

2

3

4

5

6

7

8

9

1 2 3 4 5 6 7 8 9

FRO

M

TO8

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Adjacency Matrix

|V |

|V |

We will in general assume that the vertices are numbered 1, 2, 3 . . . |V |

Graph representations

7

1

3

5

2

4

6

9

0 1 1 0 0 0 0 0 0

1 0 1 1 1 0 0 0 0

1 1 0 1 1 0 0 0 0

0 1 1 0 1 1 0 0 0

0 1 1 1 0 1 0 0 0

0 0 0 1 1 0 0 0 0

0 0 0 0 0 0 0 1 1

0 0 0 0 0 0 1 0 1

0 0 0 0 0 0 1 1 0

1

2

3

4

5

6

7

8

9

1 2 3 4 5 6 7 8 9

FRO

M

TO8

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Adjacency Matrix

|V |

|V |

We will in general assume that the vertices are numbered 1, 2, 3 . . . |V |

Graph representations

7

1

3

5

2

4

6

9

0 1 1 0 0 0 0 0 0

1 0 1 1 1 0 0 0 0

1 1 0 1 1 0 0 0 0

0 1 1 0 1 1 0 0 0

0 1 1 1 0 1 0 0 0

0 0 0 1 1 0 0 0 0

0 0 0 0 0 0 0 1 1

0 0 0 0 0 0 1 0 1

0 0 0 0 0 0 1 1 0

1

2

3

4

5

6

7

8

9

1 2 3 4 5 6 7 8 9

FRO

M

TO8

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Adjacency Matrix

|V |

|V |

We will in general assume that the vertices are numbered 1, 2, 3 . . . |V |

Graph representations

7

1

3

5

2

4

6

9

1

3

6

7

8

9

1 3 54

1

2

2 54

3 62

3 62

54

8 9

7 9

7 8

38

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Adjacency List(using linked lists)

We will in general assume that the vertices are numbered 1, 2, 3 . . . |V |

|V | 5 4

4 5

2

Graph representations

7

1

3

5

2

4

6

9

1

3

6

7

8

9

1 3 54

1

2

2 54

3 62

3 62

54

8 9

7 9

7 8

38

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Adjacency List(using linked lists)

We will in general assume that the vertices are numbered 1, 2, 3 . . . |V |

|V | 5 4

4 5

2

Graph representations

7

1

3

5

2

4

6

9

1

3

6

7

8

9

1 3 54

1

2

2 54

3 62

3 62

54

8 9

7 9

7 8

38

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Adjacency List(using linked lists)

We will in general assume that the vertices are numbered 1, 2, 3 . . . |V |

|V | 5 4

4 5

2

Graph representations

7

1

3

5

2

4

6

9

1

3

6

7

8

9

1 3 54

1

2

2 54

3 62

3 62

54

8 9

7 9

7 8

38

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Adjacency List(using linked lists)

We will in general assume that the vertices are numbered 1, 2, 3 . . . |V |

|V | 5 4

4 5

2

Graph representations

7

1

3

5

2

4

6

9

1

3

6

7

8

9

1 3 54

1

2

2 54

3 62

3 62

54

8 9

7 9

7 8

38

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Adjacency List(using linked lists)

We will in general assume that the vertices are numbered 1, 2, 3 . . . |V |

|V | 5 4

4 5

2

Graph representations

7

1

3

5

2

4

6

9

1

3

6

7

8

9

1 3 54

1

2

2 54

3 62

3 62

54

8 9

7 9

7 8

38

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Adjacency List(using linked lists)

both representations are symmetric because the graphs are undirected

We will in general assume that the vertices are numbered 1, 2, 3 . . . |V |

|V | 5 4

4 5

2

Basic operations

Adjacency Matrix

Adjacency Matrix

Adjacency List(using linked lists)

Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

0 1 1 0 0

1 0 1 1 1

1 1 0 1 1

0 1 1 0 1

0 1 1 1 0

1

2

3

4

5

1 2 3 4 5 12345

1

12

2

3

2

3

3

4

2

Basic operations

Adjacency Matrix

Adjacency Matrix

Adjacency List(using linked lists)

Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space Θ(|V |2) Θ(|V |+ |E|)

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

0 1 1 0 0

1 0 1 1 1

1 1 0 1 1

0 1 1 0 1

0 1 1 1 0

1

2

3

4

5

1 2 3 4 5 12345

1

12

2

3

2

3

3

4

2

Basic operations

Adjacency Matrix

Adjacency Matrix

Adjacency List(using linked lists)

Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space Θ(|V |2) Θ(|V |+ |E|)

O(1) time

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

0 1 1 0 0

1 0 1 1 1

1 1 0 1 1

0 1 1 0 1

0 1 1 1 0

1

2

3

4

5

1 2 3 4 5 12345

1

12

2

3

2

3

3

4

2

Basic operations

Adjacency Matrix

Adjacency Matrix

Adjacency List(using linked lists)

Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space Θ(|V |2) Θ(|V |+ |E|)

O(1) time O(V ) time

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

0 1 1 0 0

1 0 1 1 1

1 1 0 1 1

0 1 1 0 1

0 1 1 1 0

1

2

3

4

5

1 2 3 4 5 12345

1

12

2

3

2

3

3

4

2

Basic operations

Adjacency Matrix

Adjacency Matrix

Adjacency List(using linked lists)

Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space Θ(|V |2) Θ(|V |+ |E|)

O(1) time O(deg(u)) time

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

0 1 1 0 0

1 0 1 1 1

1 1 0 1 1

0 1 1 0 1

0 1 1 1 0

1

2

3

4

5

1 2 3 4 5 12345

1

12

2

3

2

3

3

4

2

Basic operations

Adjacency Matrix

Adjacency Matrix

Adjacency List(using linked lists)

Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space Θ(|V |2) Θ(|V |+ |E|)

O(1) time O(deg(u)) time

deg(u) (the degree of u),

is the number of edges leaving u

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

0 1 1 0 0

1 0 1 1 1

1 1 0 1 1

0 1 1 0 1

0 1 1 1 0

1

2

3

4

5

1 2 3 4 5 12345

1

12

2

3

2

3

3

4

2

Basic operations

Adjacency Matrix

Adjacency Matrix

Adjacency List(using linked lists)

Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space Θ(|V |2) Θ(|V |+ |E|)

O(1) time O(deg(u)) time

deg(u) (the degree of u),

is the number of edges leaving u

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

0 1 1 0 0

1 0 1 1 1

1 1 0 1 1

0 1 1 0 1

0 1 1 1 0

1

2

3

4

5

1 2 3 4 5 12345

1

12

2

3

2

3

3

4

2

some vertex u

Basic operations

Adjacency Matrix

Adjacency Matrix

Adjacency List(using linked lists)

Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space Θ(|V |2) Θ(|V |+ |E|)

O(1) time O(deg(u)) time

deg(u) (the degree of u),

is the number of edges leaving u

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

0 1 1 0 0

1 0 1 1 1

1 1 0 1 1

0 1 1 0 1

0 1 1 1 0

1

2

3

4

5

1 2 3 4 5 12345

1

12

2

3

2

3

3

4

2

some vertex u

deg(u) = 8

Basic operations

Adjacency Matrix

Adjacency Matrix

Adjacency List(using linked lists)

Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space Θ(|V |2) Θ(|V |+ |E|)

O(1) time O(deg(u)) time

deg(u) (the degree of u),

is the number of edges leaving u

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

0 1 1 0 0

1 0 1 1 1

1 1 0 1 1

0 1 1 0 1

0 1 1 1 0

1

2

3

4

5

1 2 3 4 5 12345

1

12

2

3

2

3

3

4

2

Basic operations

Adjacency Matrix

Adjacency Matrix

Adjacency List(using linked lists)

Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space Θ(|V |2) Θ(|V |+ |E|)

O(1) time

O(V ) time

O(deg(u)) time

deg(u) (the degree of u),

is the number of edges leaving u

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

0 1 1 0 0

1 0 1 1 1

1 1 0 1 1

0 1 1 0 1

0 1 1 1 0

1

2

3

4

5

1 2 3 4 5 12345

1

12

2

3

2

3

3

4

2

Basic operations

Adjacency Matrix

Adjacency Matrix

Adjacency List(using linked lists)

Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space Θ(|V |2) Θ(|V |+ |E|)

O(1) time

O(V ) time O(deg(u)) time

O(deg(u)) time

deg(u) (the degree of u),

is the number of edges leaving u

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

0 1 1 0 0

1 0 1 1 1

1 1 0 1 1

0 1 1 0 1

0 1 1 1 0

1

2

3

4

5

1 2 3 4 5 12345

1

12

2

3

2

3

3

4

2

Basic operations

Adjacency Matrix

Adjacency Matrix

Adjacency List(using linked lists)

Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space

Adjacency List(using hash tables)

Θ(|V |2) Θ(|V |+ |E|)

O(1) time

O(V ) time O(deg(u)) time

O(deg(u)) time

deg(u) (the degree of u),

is the number of edges leaving u

Θ(|V |+ |E|)

O(deg(u)) time

O(1) time

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

0 1 1 0 0

1 0 1 1 1

1 1 0 1 1

0 1 1 0 1

0 1 1 1 0

1

2

3

4

5

1 2 3 4 5 12345

1

12

2

3

2

3

3

4

2

Adjacency List(using hash tables)

12345

Basic operations

all three representations work for directed and/or weighted graphs too

Adjacency Matrix

Adjacency Matrix

Adjacency List(using linked lists)

Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space

Adjacency List(using hash tables)

Θ(|V |2) Θ(|V |+ |E|)

O(1) time

O(V ) time O(deg(u)) time

O(deg(u)) time

deg(u) (the degree of u),

is the number of edges leaving u

Θ(|V |+ |E|)

O(deg(u)) time

O(1) time

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

0 1 1 0 0

1 0 1 1 1

1 1 0 1 1

0 1 1 0 1

0 1 1 1 0

1

2

3

4

5

1 2 3 4 5

(with the same complexities)

12345

1

12

2

3

2

3

3

4

2

Adjacency List(using hash tables)

12345

Basic operations

all three representations work for directed and/or weighted graphs too

Adjacency Matrix

Adjacency Matrix

Adjacency List(using linked lists)

Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space

Adjacency List(using hash tables)

Θ(|V |2) Θ(|V |+ |E|)

O(1) time

O(V ) time O(deg(u)) time

O(deg(u)) time

deg(u) (the degree of u),

is the number of edges leaving u

Θ(|V |+ |E|)

O(deg(u)) time

O(1) time

why don’t we always use these?

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

0 1 1 0 0

1 0 1 1 1

1 1 0 1 1

0 1 1 0 1

0 1 1 1 0

1

2

3

4

5

1 2 3 4 5

(with the same complexities)

12345

1

12

2

3

2

3

3

4

2

Adjacency List(using hash tables)

12345

Basic operations

Adjacency Matrix Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space

Adjacency List(using hash tables)

Θ(|V |2) Θ(|V |+ |E|)

O(1) time

O(V ) time O(deg(u)) time

O(deg(u)) time

Θ(|V |+ |E|)

O(deg(u)) time

O(1) time

why don’t we always use these?

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Basic operations

Adjacency Matrix Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space

Adjacency List(using hash tables)

Θ(|V |2) Θ(|V |+ |E|)

O(1) time

O(V ) time O(deg(u)) time

O(deg(u)) time

Θ(|V |+ |E|)

O(deg(u)) time

O(1) time

why don’t we always use these?

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Basic hash tables give expected time complexities (constant time ‘on average’)

- no worst case guarantees against collisions

Basic operations

Adjacency Matrix Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space

Adjacency List(using hash tables)

Θ(|V |2) Θ(|V |+ |E|)

O(1) time

O(V ) time O(deg(u)) time

O(deg(u)) time

Θ(|V |+ |E|)

O(deg(u)) time

O(1) time

why don’t we always use these?

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Basic hash tables give expected time complexities (constant time ‘on average’)

- no worst case guarantees against collisions

If you’re interested in hashing with provable guarantees,come to COMS31900 (Advanced Algorithms)

Basic operations

Adjacency Matrix Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space

Adjacency List(using hash tables)

Θ(|V |2) Θ(|V |+ |E|)

O(1) time

O(V ) time O(deg(u)) time

O(deg(u)) time

Θ(|V |+ |E|)

O(deg(u)) time

O(1) time

why don’t we always use these?

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Basic hash tables give expected time complexities (constant time ‘on average’)

- no worst case guarantees against collisions

If you’re interested in hashing with provable guarantees,come to COMS31900 (Advanced Algorithms)

Fortunately, few algorithms need to ask “is there an edge?”

Normally, “tell me all the edges” is fine

Basic operations

Adjacency Matrix Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space

Adjacency List(using hash tables)

Θ(|V |2) Θ(|V |+ |E|)

O(1) time

O(V ) time O(deg(u)) time

O(deg(u)) time

Θ(|V |+ |E|)

O(deg(u)) time

O(1) time

why don’t we always use these?

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Basic operations

Adjacency Matrix Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space

Adjacency List(using hash tables)

Θ(|V |2) Θ(|V |+ |E|)

O(1) time

O(V ) time O(deg(u)) time

O(deg(u)) time

Θ(|V |+ |E|)

O(deg(u)) time

O(1) time

why don’t we always use these?

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

For this course we’ll stick to Adjacency Matrices and Lists (using linked lists)(for today just Adjacency Lists)

Basic operations

Adjacency Matrix Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space

Adjacency List(using hash tables)

Θ(|V |2) Θ(|V |+ |E|)

O(1) time

O(V ) time O(deg(u)) time

O(deg(u)) time

Θ(|V |+ |E|)

O(deg(u)) time

O(1) time

why don’t we always use these?

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

For this course we’ll stick to Adjacency Matrices and Lists (using linked lists)(for today just Adjacency Lists)

One practical reason to stick to standard representations is that

you may not have control over how your graph is stored.

Basic operations

Adjacency Matrix Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space

Adjacency List(using hash tables)

Θ(|V |2) Θ(|V |+ |E|)

O(1) time

O(V ) time O(deg(u)) time

O(deg(u)) time

Θ(|V |+ |E|)

O(deg(u)) time

O(1) time

why don’t we always use these?

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

For this course we’ll stick to Adjacency Matrices and Lists (using linked lists)(for today just Adjacency Lists)

One practical reason to stick to standard representations is that

you may not have control over how your graph is stored.

it may not even be stored as a graph...

Basic operations

Adjacency Matrix Adjacency List(using linked lists)

Is there an edge from vertex u to v?

List all the edges leaving u ∈ V

Space

Adjacency List(using hash tables)

Θ(|V |2) Θ(|V |+ |E|)

O(1) time

O(V ) time O(deg(u)) time

O(deg(u)) time

Θ(|V |+ |E|)

O(deg(u)) time

O(1) time

why don’t we always use these?

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

For this course we’ll stick to Adjacency Matrices and Lists (using linked lists)(for today just Adjacency Lists)

One practical reason to stick to standard representations is that

you may not have control over how your graph is stored.

it may not even be stored as a graph...

Fortunately in many cases, you can pretend your graph is stored as one of the above.

Intersection Graphs

Intersection Graphs

the intersections of these circles

correspond to the graph below

Intersection Graphs

each circle is a vertex the intersections of these circles

correspond to the graph below

Intersection Graphs

the intersections of these circles

correspond to the graph below

Intersection Graphs

each intersection

is an edge

the intersections of these circles

correspond to the graph below

Intersection Graphs

each intersection

is an edge

the intersections of these circles

correspond to the graph below

Intersection Graphs

each intersection

is an edge

we can pretend we have

an Adjacency Matrix

without building one

even if we only store the circles,

the intersections of these circles

correspond to the graph below

Other intersection graphs. . .

(these are 1D intervals on a line spread out for visual clarity)

both of these ‘collections’ also

correspond to the example graph

Other intersection graphs. . .

= an edge

= a vertex

(these are 1D intervals on a line spread out for visual clarity)

both of these ‘collections’ also

correspond to the example graph

Other intersection graphs. . .

= an edge

= a vertex

there is an edge if two intervals intersect

each interval is a vertex

(these are 1D intervals on a line spread out for visual clarity)

both of these ‘collections’ also

correspond to the example graph

Other intersection graphs. . .

= an edge

= a vertex

there is an edge if two intervals intersect

each interval is a vertex

(these are 1D intervals on a line spread out for visual clarity)

we can pretend we have

an Adjacency Matrix

without building one

Again,

both of these ‘collections’ also

correspond to the example graph

Configuration Graphs

This is the configuration graph for the

(4 disk) towers of Hanoi

a node is a state that the

game can be in

there is an edge if you can get from

one state to another in a single move

Configuration Graphs

This is the configuration graph for the

(4 disk) towers of Hanoi

a node is a state that the

game can be in

there is an edge if you can get from

one state to another in a single move

Configuration Graphs

This is the configuration graph for the

(4 disk) towers of Hanoi

a node is a state that the

game can be in

there is an edge if you can get from

one state to another in a single move

Configuration Graphs

This is the configuration graph for the

(4 disk) towers of Hanoi

a node is a state that the

game can be in

there is an edge if you can get from

one state to another in a single move

Configuration Graphs

This is the configuration graph for the

(4 disk) towers of Hanoi

a node is a state that the

game can be in

there is an edge if you can get from

one state to another in a single move

Configuration Graphs

This is the configuration graph for the

(4 disk) towers of Hanoi

a node is a state that the

game can be in

there is an edge if you can get from

one state to another in a single move

Configuration Graphs

This is the configuration graph for the

(4 disk) towers of Hanoi

a node is a state that the

game can be in

there is an edge if you can get from

one state to another in a single move

Configuration Graphs

This is the configuration graph for the

(4 disk) towers of Hanoi

a node is a state that the

game can be in

there is an edge if you can get from

one state to another in a single move

Configuration Graphs

This is the configuration graph for the

(4 disk) towers of Hanoi

a node is a state that the

game can be in

there is an edge if you can get from

one state to another in a single move

Configuration Graphs

This is the configuration graph for the

(4 disk) towers of Hanoi

a node is a state that the

game can be in

there is an edge if you can get from

one state to another in a single move

storing this uses much less space than

storing this this graph

Configuration Graphs

This is the configuration graph for the

(4 disk) towers of Hanoi

a node is a state that the

game can be in

there is an edge if you can get from

one state to another in a single move

storing this uses much less space than

storing this this graph

we can pretend we have

an Adjacency List

without building one

Exploring a graph

you are here

BAG

Exploring a graph

you are here

BAG Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

you are here

BAG Goal: visit every vertex in a

connected graph efficiently

The bag (secretly a data structure)

We can put a vertex in the bag

We can take a vertex from the bag

We don’t care how it works (for now)

(the bag doesn’t forget or change things)

but we don’t know which one we’ll get

Exploring a graph

BAG Goal: visit every vertex in a

connected graph efficiently

We going to use an adjacency list so the

graph is really stored like this:

The bag (secretly a data structure)

We can put a vertex in the bag

We can take a vertex from the bag

We don’t care how it works (for now)

(the bag doesn’t forget or change things)

but we don’t know which one we’ll get

Exploring a graph

you are here

BAG Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

vertex s

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

vertex s

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

vertex s

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

vertex s

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

back in!

in twice!

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

already marked

(do nothing)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Some time later. . .

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Some time later. . . ?

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Goal: visit every vertex in a

connected graph efficiently

Some time later. . . ?

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

3. How fast is it? (in the worst case)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

3. How fast is it? (in the worst case)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

1. Does TRAVERSE always stop?

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

1. Does TRAVERSE always stop?

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

back in!

in twice!

1. Does TRAVERSE always stop?

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

back in!

in twice!

1. Does TRAVERSE always stop?

We may put a vertex in the bag many times but each edge is only

processed twice (once in each direction)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

back in!

in twice!

1. Does TRAVERSE always stop?

We may put a vertex in the bag many times but each edge is only

processed twice (once in each direction)

never seen

again!

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

back in!

in twice!

1. Does TRAVERSE always stop?

We may put a vertex in the bag many times but each edge is only

processed twice (once in each direction)

never seen

again!

Important later: number of ‘puts’ 6 2|E|

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

back in!

in twice!

1. Does TRAVERSE always stop?

We may put a vertex in the bag many times but each edge is only

processed twice (once in each direction)

never seen

again!

Important later: number of ‘puts’ 6 2|E|

TRAVERSE(s)

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

back in!

in twice!

1. Does TRAVERSE always stop?

We may put a vertex in the bag many times but each edge is only

processed twice (once in each direction)

never seen

again!

Important later: number of ‘puts’ 6 2|E|

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

back in!

in twice!

1. Does TRAVERSE always stop? Yes

We may put a vertex in the bag many times but each edge is only

processed twice (once in each direction)

never seen

again!

Important later: number of ‘puts’ 6 2|E|

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

Yes

3. How fast is it? (in the worst case)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

Proof (by induction)

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

there could be a ‘shortcut’

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

there could be a ‘shortcut’

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

there could be a ‘shortcut’

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

there could be a ‘shortcut’

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

there could be a ‘shortcut’

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

there could be a ‘shortcut’

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

Yes

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

Yes

The correctness doesn’t depend

on how the bag works!

(unless it was already marked)

Exploring a graph

BAG

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

2. Does it always visit every vertex?

When a vertex on this path is marked, the next vertex is put in the bag

Eventually, that vertex is removed from the bag and is marked.

Consider any path from s to some v:

s

v

Proof (by induction)

Yes

The correctness doesn’t depend

on how the bag works!

(but this doesn’t tell you anything about

which order vertices are marked in)

(unless it was already marked)

Exploring a graph

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

Yes

Yes3. How fast is it? (in the worst case)

Exploring a graph

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

Yes

Yes3. How fast is it? (in the worst case)

Assumption

(we’ll come back to this)

bag operations

take O(1) time

Exploring a graph

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

Yes

Yes3. How fast is it? (in the worst case)

Assumption

(we’ll come back to this)

bag operations

take O(1) time

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Exploring a graph

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

Yes

Yes3. How fast is it? (in the worst case)

Assumption

(we’ll come back to this)

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

bag operations

take O(1) time

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Exploring a graph

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

Yes

Yes3. How fast is it? (in the worst case)

Time complexity:

Assumption

(we’ll come back to this)

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

bag operations

take O(1) time

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Exploring a graph

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

Yes

Yes3. How fast is it? (in the worst case)

Time complexity:

Assumption

(we’ll come back to this)

O(1) time every time we take from the bag

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

bag operations

take O(1) time

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Exploring a graph

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

Yes

Yes3. How fast is it? (in the worst case)

Time complexity:

Assumption

(we’ll come back to this)

(store an array where mark[u] = 1 iff u is marked)

O(1) time every time we take from the bag

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

bag operations

take O(1) time

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Exploring a graph

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

Yes

Yes3. How fast is it? (in the worst case)

Time complexity:

Assumption

(we’ll come back to this)

(store an array where mark[u] = 1 iff u is marked)

O(1) time every time we take from the bag

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

bag operations

take O(1) time

O(1) time every time we put into the bag

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Exploring a graph

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

Yes

Yes3. How fast is it? (in the worst case)

Time complexity:

Assumption

(we’ll come back to this)

(store an array where mark[u] = 1 iff u is marked)

O(1) time every time we take from the bag

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

bag operations

take O(1) time

O(1) time every time we put into the bag

What is the total number of bag operations?

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Exploring a graph

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

Yes

Yes3. How fast is it? (in the worst case)

Time complexity:

Assumption

(we’ll come back to this)

(store an array where mark[u] = 1 iff u is marked)

O(1) time every time we take from the bag

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

bag operations

take O(1) time

O(1) time every time we put into the bag

What is the total number of bag operations?

we do at most 2|E| put operations

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Exploring a graph

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

Yes

Yes3. How fast is it? (in the worst case)

Time complexity:

Assumption

(we’ll come back to this)

(store an array where mark[u] = 1 iff u is marked)

O(1) time every time we take from the bag

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

bag operations

take O(1) time

O(1) time every time we put into the bag

What is the total number of bag operations?

we do at most 2|E| put operations

so we do at most 2|E| take operations

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Exploring a graph

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

Yes

Yes3. How fast is it? (in the worst case)

Time complexity:

Assumption

(we’ll come back to this)

(store an array where mark[u] = 1 iff u is marked)

O(1) time every time we take from the bag

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

bag operations

take O(1) time

O(1) time every time we put into the bag

What is the total number of bag operations?

we do at most 2|E| put operations

so we do at most 2|E| take operations

The overall time complexity is O(|E|)

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Exploring a graph

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

Yes

Yes3. How fast is it? (in the worst case)

Time complexity:

Assumption

(we’ll come back to this)

(store an array where mark[u] = 1 iff u is marked)

O(1) time every time we take from the bag

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

bag operations

take O(1) time

O(1) time every time we put into the bag

What is the total number of bag operations?

we do at most 2|E| put operations

so we do at most 2|E| take operations

The overall time complexity is O(|E|)

O(|E|)

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Exploring a graph

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

Yes

Yes3. How fast is it? (in the worst case)

Assumption

(we’ll come back to this)

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

bag operations

take O(1) time

O(|E|)

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Exploring a graph

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

Yes

Yes3. How fast is it? (in the worst case)

Assumption

(we’ll come back to this)

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

bag operations

take O(1) time

O(|E|)

What if we had used an

adjacency matrix?

0 1 1 0 0

1 0 1 1 1

1 1 0 1 1

0 1 1 0 1

0 1 1 1 0

1

2

3

4

5

1 2 3 4 5

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Exploring a graph

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

Yes

Yes3. How fast is it? (in the worst case)

Assumption

(we’ll come back to this)

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

bag operations

take O(1) time

O(|E|)

What if we had used an

adjacency matrix?

finding all edges leaving u would have taken O(|V |) time

0 1 1 0 0

1 0 1 1 1

1 1 0 1 1

0 1 1 0 1

0 1 1 1 0

1

2

3

4

5

1 2 3 4 5

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

Exploring a graph

Questions:

1. Does TRAVERSE always stop?

2. Does it always visit every vertex?

Yes

Yes3. How fast is it? (in the worst case)

Assumption

(we’ll come back to this)

put s into the bag

while the bag is not empty

take u from the bag

if u unmarked

mark u

for every edge (u, v)

put v into the bag

TRAVERSE(s)

bag operations

take O(1) time

O(|E|)

What if we had used an

adjacency matrix?

finding all edges leaving u would have taken O(|V |) time

0 1 1 0 0

1 0 1 1 1

1 1 0 1 1

0 1 1 0 1

0 1 1 1 0

1

2

3

4

5

1 2 3 4 5

overall, the time complexity would have been O(|V |2) instead of O(|E|).

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges

How should we implement the bag?

BAG

Queue Stack

Operations take O(1) time

Depth First SearchBreadth First Search

but in different orders with different types of bag

TRAVERSE visits every vertex in a connected graph in O(|E|) time

with a Queue the algorithm is called with a Stack the algorithm is called

Applications Applications

Shortest paths in unweighted graphs

Max-Flow

Testing whether a graph is bipartite

Finding (strongly) connected components

Topicologically sorting a Directed Acyclic Graph

Testing for planarity

How should we implement the bag?

BAG

Queue Stack

Operations take O(1) time

Depth First SearchBreadth First Search

but in different orders with different types of bag

TRAVERSE visits every vertex in a connected graph in O(|E|) time

with a Queue the algorithm is called with a Stack the algorithm is called

Applications Applications

Shortest paths in unweighted graphs

Max-Flow

Testing whether a graph is bipartite

Finding (strongly) connected components

Topicologically sorting a Directed Acyclic Graph

Testing for planarity

(and it works for directed graphs too)

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

distance = 1

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

distance = 3

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

distance = 6

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

these are all in front of these

in the queue

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

these are all in front of these

in the queue

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

This is why it’s called

Breadth-First Search

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

This is why it’s called

Breadth-First Search

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Proof by induction (on the distance from s)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

This is why it’s called

Breadth-First Search

Base Case: BFS marks all vertices at distance 0 from s

before marking any vertex at distance > 0 .

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Proof by induction (on the distance from s)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

This is why it’s called

Breadth-First Search

Base Case: BFS marks all vertices at distance 0 from s

before marking any vertex at distance > 0 .

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Proof by induction (on the distance from s)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

This is why it’s called

Breadth-First Search

Base Case: BFS marks all vertices at distance 0 from s

before marking any vertex at distance > 0 .

Inductive Hypothesis: Assume that BFS marks all vertices at distance (i− 1)

before marking any vertex at distance > (i− 1).

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Proof by induction (on the distance from s)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

This is why it’s called

Breadth-First Search

Base Case: BFS marks all vertices at distance 0 from s

before marking any vertex at distance > 0 .

Inductive Hypothesis: Assume that BFS marks all vertices at distance (i− 1)

before marking any vertex at distance > (i− 1).

When BFS marks a vertex at distance (i− 1),it puts all its neighbours in the queue.

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Proof by induction (on the distance from s)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

This is why it’s called

Breadth-First Search

Base Case: BFS marks all vertices at distance 0 from s

before marking any vertex at distance > 0 .

Inductive Hypothesis: Assume that BFS marks all vertices at distance (i− 1)

before marking any vertex at distance > (i− 1).

When BFS marks a vertex at distance (i− 1),it puts all its neighbours in the queue.

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Proof by induction (on the distance from s)

v is u’s neighbour iff

(u, v) ∈ E

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

This is why it’s called

Breadth-First Search

Base Case: BFS marks all vertices at distance 0 from s

before marking any vertex at distance > 0 .

Inductive Hypothesis: Assume that BFS marks all vertices at distance (i− 1)

before marking any vertex at distance > (i− 1).

When BFS marks a vertex at distance (i− 1),

Immediately after marking all vertices at distance (i− 1):

it puts all its neighbours in the queue.

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Proof by induction (on the distance from s)

v is u’s neighbour iff

(u, v) ∈ E

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

This is why it’s called

Breadth-First Search

Base Case: BFS marks all vertices at distance 0 from s

before marking any vertex at distance > 0 .

Inductive Hypothesis: Assume that BFS marks all vertices at distance (i− 1)

before marking any vertex at distance > (i− 1).

When BFS marks a vertex at distance (i− 1),

Immediately after marking all vertices at distance (i− 1):

it puts all its neighbours in the queue.

every vertex at distance i is in the queue.

no vertex at distance > i has been put in the queue.

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Proof by induction (on the distance from s)

v is u’s neighbour iff

(u, v) ∈ E

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

This is why it’s called

Breadth-First Search

Base Case: BFS marks all vertices at distance 0 from s

before marking any vertex at distance > 0 .

Inductive Hypothesis: Assume that BFS marks all vertices at distance (i− 1)

before marking any vertex at distance > (i− 1).

When BFS marks a vertex at distance (i− 1),

Immediately after marking all vertices at distance (i− 1):

it puts all its neighbours in the queue.

every vertex at distance i is in the queue.

no vertex at distance > i has been put in the queue.

because we haven’t marked any of its neighbours

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Proof by induction (on the distance from s)

(they are all at distance > (i− 1))

v is u’s neighbour iff

(u, v) ∈ E

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

This is why it’s called

Breadth-First Search

Base Case: BFS marks all vertices at distance 0 from s

before marking any vertex at distance > 0 .

Inductive Hypothesis: Assume that BFS marks all vertices at distance (i− 1)

before marking any vertex at distance > (i− 1).

When BFS marks a vertex at distance (i− 1),

Immediately after marking all vertices at distance (i− 1):

it puts all its neighbours in the queue.

every vertex at distance i is in the queue.

no vertex at distance > i has been put in the queue.

because we haven’t marked any of its neighbours

Therefore, all vertices at distance i will be marked before any vertex at distance > i

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Proof by induction (on the distance from s)

(they are all at distance > (i− 1))

v is u’s neighbour iff

(u, v) ∈ E

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

we can use this to find the shortest path

from s to every other vertex in O(|V |+ |E|) time

With a little bit of book-keeping,

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

This also works for directed, unweighted graphs

we can use this to find the shortest path

from s to every other vertex in O(|V |+ |E|) time

With a little bit of book-keeping,

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest paths in unweighted graphs

s

Goal: find the distance from the

source s to every other vertex

Breadth-First Search (BFS)

is TRAVERSE using a queue as the bag

Lemma In BFS, the vertices

are marked in distance order (smallest first)

This also works for directed, unweighted graphs

we can use this to find the shortest path

from s to every other vertex in O(|V |+ |E|) time

With a little bit of book-keeping,

It does not work for weighted graphs

TRAVERSE(s) - with a queue

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s How does this affect the time complexity?

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

Time complexity:

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s How does this affect the time complexity?

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

Time complexity:

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s How does this affect the time complexity?

O(|V |) time to initialise an array dist

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

Time complexity:

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s How does this affect the time complexity?

O(|V |) time to initialise an array dist

O(1) time to set the distance to s

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

Time complexity:

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s How does this affect the time complexity?

O(|V |) time to initialise an array dist

O(1) time to set the distance to s

O(1) time whenever we put into the queue

(so this doesn’t change the complexity)

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

Time complexity:

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s How does this affect the time complexity?

O(|V |) time to initialise an array dist

O(1) time to set the distance to s

O(1) time whenever we put into the queue

(so this doesn’t change the complexity)

so the overall complexity is O(|V |+ |E|)

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s

Why does this work?

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s

Why does this work?

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s

Why does this work?

Correctness sketch: (using the Lemma)

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s

Why does this work?

Correctness sketch: (using the Lemma)

For each v, dist(v) is set when it is first ‘discovered’

and inserted into the queue. (and it never changes)

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s

Why does this work?

Correctness sketch: (using the Lemma)

For each v, dist(v) is set when it is first ‘discovered’

and inserted into the queue. (and it never changes)

Let u be the vertex which first ‘discovered’ v

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s

Why does this work?

Correctness sketch: (using the Lemma)

For each v, dist(v) is set when it is first ‘discovered’

and inserted into the queue. (and it never changes)

Let u be the vertex which first ‘discovered’ v

Lemma In BFS, the vertices are marked in

distance order (smallest first)

BFS sets dist(v) = dist(u) + 1

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s

Why does this work?

Correctness sketch: (using the Lemma)

For each v, dist(v) is set when it is first ‘discovered’

and inserted into the queue. (and it never changes)

Let u be the vertex which first ‘discovered’ v

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Assume for a contradiction that there is a path

from s to v with length < dist(u) + 1

BFS sets dist(v) = dist(u) + 1

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s

Why does this work?

Correctness sketch: (using the Lemma)

For each v, dist(v) is set when it is first ‘discovered’

and inserted into the queue. (and it never changes)

Let u be the vertex which first ‘discovered’ v

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Assume for a contradiction that there is a path

from s to v with length < dist(u) + 1

BFS sets dist(v) = dist(u) + 1

length < dist(u) + 1

sv

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s

Why does this work?

Correctness sketch: (using the Lemma)

For each v, dist(v) is set when it is first ‘discovered’

and inserted into the queue. (and it never changes)

Let u be the vertex which first ‘discovered’ v

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Let x be the previous vertex on this path

Assume for a contradiction that there is a path

from s to v with length < dist(u) + 1

BFS sets dist(v) = dist(u) + 1

length < dist(u) + 1

sv

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s

Why does this work?

Correctness sketch: (using the Lemma)

For each v, dist(v) is set when it is first ‘discovered’

and inserted into the queue. (and it never changes)

Let u be the vertex which first ‘discovered’ v

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Let x be the previous vertex on this path

Assume for a contradiction that there is a path

from s to v with length < dist(u) + 1

BFS sets dist(v) = dist(u) + 1

length < dist(u) + 1

sv

x

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s

Why does this work?

Correctness sketch: (using the Lemma)

For each v, dist(v) is set when it is first ‘discovered’

and inserted into the queue. (and it never changes)

Let u be the vertex which first ‘discovered’ v

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Let x be the previous vertex on this path

Assume for a contradiction that there is a path

from s to v with length < dist(u) + 1

BFS sets dist(v) = dist(u) + 1

length < dist(u) length = 1

sv

x

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s

Why does this work?

Correctness sketch: (using the Lemma)

For each v, dist(v) is set when it is first ‘discovered’

and inserted into the queue. (and it never changes)

Let u be the vertex which first ‘discovered’ v

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Let x be the previous vertex on this path

Assume for a contradiction that there is a path

from s to v with length < dist(u) + 1

BFS sets dist(v) = dist(u) + 1

length < dist(u) length = 1

sv

x

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s

Why does this work?

Correctness sketch: (using the Lemma)

For each v, dist(v) is set when it is first ‘discovered’

and inserted into the queue. (and it never changes)

Let u be the vertex which first ‘discovered’ v

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Let x be the previous vertex on this path

Assume for a contradiction that there is a path

from s to v with length < dist(u) + 1

x has distance < dist(u) so was marked before u

(by the Lemma) and ‘discovered’ v first

BFS sets dist(v) = dist(u) + 1

length < dist(u) length = 1

sv

x

Shortest Paths using BFS

for all v, set dist(v) =∞ (NEW!)

set dist(s) = 0 (NEW!)

put s into the queue

while the queue is not empty

take u from the queue

if u unmarked

mark u

for every edge (u, v)

put v into the queue

if dist(v) =∞ (NEW!)

dist(v) = dist(u) + 1 (NEW!)

BFS(s)

dist(v) gives the distance

between s and v

We’ve added four (NEW!) lines to TRAVERSE

to track the distances from s

Why does this work?

Correctness sketch: (using the Lemma)

For each v, dist(v) is set when it is first ‘discovered’

and inserted into the queue. (and it never changes)

Let u be the vertex which first ‘discovered’ v

Lemma In BFS, the vertices are marked in

distance order (smallest first)

Let x be the previous vertex on this path

Assume for a contradiction that there is a path

from s to v with length < dist(u) + 1

x has distance < dist(u) so was marked before u

(by the Lemma) and ‘discovered’ v first

Contradiction!

BFS sets dist(v) = dist(u) + 1

length < dist(u) length = 1

sv

x

Conclusion

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

- the traversal order depends on the type of bag

TRAVERSE visits every vertex in a connected graph in O(|E|) time

with a Queue the algorithm is called with a Stack the algorithm is called

Applications Applications

Shortest paths in unweighted graphs

Max-Flow

Testing whether a graph is bipartite

Finding (strongly) connected components

Topicologically sorting a Directed Acyclic Graph

Testing for planarity

(with an O(1) time bag)

take O(|V |+ |E|) time using BFS

Question

What does TRAVERSE do on an

unconnected graph?(works for directed graphs too)

(and it works for directed graphs too)

V is the set of vertices|V | is the number of vertices

E is the set of edges|E| is the number of edges