CS106X – Programming Abstractions in C++ Cynthia Bailey Lee BFS animation slides by Keith Schwarz...

Preview:

Citation preview

CS106X – Programming Abstractions in C++Cynthia Bailey Lee

BFS animation slides by Keith Schwarz

              

CS2 in C++ Peer Instruction Materials by Cynthia Bailey Lee

 is licensed under a Creative Commons Attribution-

NonCommercial-ShareAlike 4.0 International License.

Permissions beyond the scope of this license may be available at 

http://peerinstruction4cs.org.

GraphsWhat are graphs? What are they good for?

A Social Network

Slide by Keith Schwarz

Chemical Bonds

http://4.bp.blogspot.com/-xCtBJ8lKHqA/Tjm0BONWBRI/AAAAAAAAAK4/-mHrbAUOHHg/s1600/Ethanol2.gifSlide by Keith Schwarz

http://strangemaps.files.wordpress.com/2007/02/fullinterstatemap-web.jpg Slide by Keith Schwarz

A graph is a mathematical structure for representing relationships

Consists of: A set V of vertices (or nodes)

Often have an associated label A set E of edges (or arcs)

Consist of two endpoint vertices May be directed (an edge from A to B only

allow you to go from A to B, not B to A) or undirected (an edge between A and B allows travel in both directions)

Often have an associated cost or weight

GraphsHow do we represent graphs in code?

10

Diagram shows a graph with four vertices:

Apple (outgoing edges to banana and blum)Banana (with outgoing edge to self)Pear (with outgoing edges to banana and plum)Plum (with outgoing edge to banana)

Graph terminology This is a DIRECTED graph

This is an UNDIRECTED graph

11

Diagrams each show a graph with four vertices: Apple, Banana, Pear, Plum. Each answer choice has different edge sets.

A: no edgesB: Apple to Plum directed, Apple to banana undirectedC: Apple and Banana point to each other. Two edges point from Plum to Pear

Graph terminology Which of the following is a correct graph?

A. B. C.

D. None of the above/other/more than one of the above

0 1 1 0 0 0

1 0 1 1 1 0

1 1 0 1 0 1

0 1 1 0 1 1

0 1 0 1 0 1

0 0 1 1 1 0

Representing Graphs: Adjacency Matrix

We can represent a graph as a Grid<bool>

(unweighted) or a Grid<int>

(weighted)

We can represent a graph as a Grid<bool>

(unweighted) or a Grid<int>

(weighted)

Representing Graphs: adjacency list

Node Connected To

Map<Node*, Set<Node*>> We can represent a graph as a map from

nodes to the set of nodes each node is connected

to.

We can represent a graph as a map from

nodes to the set of nodes each node is connected

to.

Slide by Keith Schwarz

Common ways of representing graphs

Adjacency list: Map<Node*, Set<Node*>>

Adjacency matrix: Grid<bool> unweighted Grid<int> weighted

How many of the following are true? Adjacency list can be used for directed graphs Adjacency list can be used for undirected graphs Adjacency matrix can be used for directed graphs Adjacency matrix can be used for undirected

graphs(A) 0 (B) 1 (C) 2 (D) 3 (E) 4

GraphsTheorems about graphs

16

Graphs lend themselves to fun theorems and proofs of said theorems!

Any graph with 6 vertices contains either a triangle (3 vertices with all pairs having an edge) or an empty triangle (3 vertices no two pairs having an edge)

17

Diagram shows a graph with four vertices, which are all fully connected with each other by undirected edges (6 edges in total).

Eulerian graphs Let G be an undirected graph

A graph is Eulerian if it can drawn without lifting the penand without repeating edges

Is this graph Eulerian?A. YesB. No

18

Diagram shows a graph with five vertices, four of which are all fully connected with each other by undirected edges (6 edges in total). The 5th vertex is connected to two of the remaining four vertices by an edge. (6 + 2 = 8 edges in total)

Eulerian graphs Let G be an undirected graph

A graph is Eulerian if it can drawn without lifting the penand without repeating edges

What about this graphA. YesB. No

19

Our second graph theorem Definition: Degree of a vertex:

number of edges adjacent to it

Euler’s theorem: a graph is Eulerian iff the number of vertices with odd degrees is either 0 or 2 (eg all vertices or all but two have even degrees)

Does it work for and ?

Proving Euler’s theoremThe following slides geek out on theoretical computer science with a proof of the Eulerian graph theorem. If you like this, YOU WILL LOVE CS103!!

21

Proving Euler’s theorem Euler’s theorem gives a necessary and

sufficient condition for a graph to be Eulerian All degrees are even Two degrees odd, rest are even

Will prove in class that this is necessary Take-home challenge: prove that this is also

sufficient

22

Proving Euler’s theorem: necessary part Euler’s theorem (necessary part):

If a graph G is Eulerian then all degrees are even; or two degrees are odd and rest are even

Try to prove it first yourself

23

Proving Euler’s theorem: necessary part Proof of Euler’s theorem (necessary part):

Let G be a graph with an Euler path: v1,v2,v3,….,vk where (vi,vi+1) are edges in G; vertices may appear more than once; and each edge of G is accounted for exactly once.

The degree of a vertex of G is the number of edges it has. For any internal vertex in the path (eg not v1 or vk), we count 2 edges in the path (one going in and one going out). So, any vertex which is not v1 or vk must have an even degree.

If v1vk then both have odd degrees. If v1=vk is the same vertex this is also has even degree. QED.

Breadth-First SearchGraph algorithms

Breadth-First SearchA B

E F

C D

G H

I J

L

K

A B

E F

C D

G H

I J

L

K

A B

E F

C D

G H

I J

L

K

Breadth-First Search

TO START:(1)Color all nodes

GREY(2)Queue is empty

F

A B

E F

C D

G H

I J

L

K

A B

E

C D

G H

I J

L

K

Breadth-First Search

F

TO START (2):(1)Enqueue the desired start node

(2)Note that anytime we enqueue a

node, we mark it YELLOW

F

A B

E F

C D

G H

I J

L

K

A B

E

C D

G H

I J

L

K

Breadth-First Search

FLOOP PROCEDURE:(1)Dequeue a node

(2)Mark current node GREEN

(3)Set current node’s GREY neighbors’

parent pointers to current node, then

enqueue them (remember: set them YELLOW)

F

A B

E F

C D

G H

I J

L

K

A B

E

C D

G H

I J

L

K

Breadth-First Search

F

A B

E

D

K

F

A B

E F

C D

G H

I J

L

K

C

G H

I J

L

Breadth-First Search

F

A B

E

D

K

F

A B

E F

C D

G H

I J

L

K

C

G H

I J

L

Breadth-First Search

A B D E K

F

A B

E

D

K

F

A B

E F

C D

G H

I J

L

K

C

G H

I J

L

Breadth-First Search

B D E K

A

A B

E

D

K

F

A B

E F

C D

G H

I J

L

K

C

G H

I J

L

Breadth-First Search

B D E K

A

A B

E

D

K

F

A B

E F

C D

G H

I J

L

K

C

G H

I J

L

Breadth-First Search

B D E K

A

A B

E

D

K

F

A B

E F

C D

G H

I J

L

K

C

G H

I J

L

Breadth-First Search

D E K

B

A B

E

D

K

F

A B

E F

C D

G H

I J

L

K

C

G H

I J

L

Breadth-First Search

D E K

B

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

K

G

I J

L

Breadth-First Search

D E K

B

C H

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

K

G

I J

L

Breadth-First Search

E K C H

D

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

K

G

I J

L

Breadth-First Search

E K C H

D

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

K

G

I J

L

Breadth-First Search

E K C H

D

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

K

G

I J

L

Breadth-First Search

K C H

E

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

K

G

I J

L

Breadth-First Search

K C H

E

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

K

G

J

L

Breadth-First Search

K C H

E

I

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

K

G

J

L

Breadth-First Search

C H I

K

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

K

G

J

L

Breadth-First Search

C H I

K

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

K

G

J

L

Breadth-First Search

C H I

K

You predict the next slide!

A. K’s neighbors F,G,H are yellow and enqueued and their parents are pointing to K

B. K’s neighbors G,H are yellow and enqueued and their parents are pointing to K

C. Other/none/more

G

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

KJ

L

Breadth-First Search

C H I

K

G

G

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

KJ

L

Breadth-First Search

C H I

K

G

G

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

KJ

L

Breadth-First Search

H I G

C

G

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

KJ

L

Breadth-First Search

H I G

C

G

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

KJ

L

Breadth-First Search

I G

H

G

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

KJ

L

Breadth-First Search

I G

H

G

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

KJ

L

Breadth-First Search

I G

G

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

KJ

L

Breadth-First Search

G

I

G

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

KJ

L

Breadth-First Search

G

I

L

G

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

KJ

Breadth-First Search

G

I

L

L

G

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

KJ

Breadth-First Search

L

G

L

G

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

KJ

Breadth-First Search

L

G

L

G

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

KJ

Breadth-First Search

L

L

G

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

KJ

Breadth-First Search

L

J

L

G

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

K

Breadth-First Search

LJ

J

L

G

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

K

Breadth-First Search

J

J

L

G

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

K

Breadth-First Search

J

Quick question about efficiency… Let’s say that you have a very

geographically diverse extended family—somebody in every city in the western U.S.

Quick question about efficiency… You’re all going to fly to Yosemite and then

drive home, and you’ve been tasked with making custom driving directions for everyone

Quick question about efficiency… You calculated the shortest path for yourself

(Yosemite to Palo Alto) and let’s just say that it took time X = O((|E| + |V|)log|V|)

With respect to the number of cities |V|, and the number of road segments |E|

How long will it take you, in total, to calculate the shortest path for ALL of your relatives?

A. O(|V|*X)B. O(|E|*|V|* X)C. XD. Other/none/more

J

L

G

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

K

Breadth-First Search

THINGS TO NOTICE:(1)We used a queue(2)What’s left is a

kind of subset of the edges, in the form of ‘parent’

pointers(3)If you follow the

parent pointers from the desired endpoint, you will

get back to the start point, and it

will be the shortest way to do that.

J

L

G

I

H

CA B

E

D

K

F

A B

E F

C D

G H

I J

L

K

Breadth-First Search

THINGS TO NOTICE:(4) We now have the

answer to the question “What is the shortest path to you from F?” for every single node in the

graph!!

But wait!! What you calculated will find the shortest

path in terms of fewest number of road segments but doesn’t at all take into account how long each road segment is!

But wait!! This might be useful if you are a fugitive

and want to go from one city to another passing through the fewest other cities on the way…

But what if we want to save gas/fewest miles?

Recommended