TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1....

19
TUTORIAL 11 GRAPH THEORY Tutorial 11: Graph Theory 1

Transcript of TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1....

Page 1: TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1. •Ghas nlists, and each list has a length nas well. Challenge Question: On your own,

TUTORIAL 11

G R A P H T H E O RY

Tutorial 11: Graph Theory 1

Page 2: TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1. •Ghas nlists, and each list has a length nas well. Challenge Question: On your own,

REMINDERS• Assignment 09 due Monday Dec 2nd at 10:00 am

• Final Exam is on Thursday, Dec 19th, 7:00 p.m.

• Q&A sessions are available.

• Piazza is still open for questions and announcements

Tutorial 11: Graph Theory 2

Page 3: TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1. •Ghas nlists, and each list has a length nas well. Challenge Question: On your own,

REVIEW: UNDIRECTED GRAPHS• An undirected graph G is a set V, of vertices, and a set E, of unordered

pairs from V, called edges. We write G = (V, E).

• (4, 6) in Graph 1 is an edge– 4, 6 are neighbours

– 4, 6 are adjacent

• Degree is number of neighbours of a vertex

– Degree of 5 in Graph 1 is 3

• G1 is connected and G2 is disconnected

Tutorial 11: Graph Theory 5Graph 1 Graph 2

Page 4: TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1. •Ghas nlists, and each list has a length nas well. Challenge Question: On your own,

QUESTION 1: REPRESENTING GRAPHS INDIFFERENT WAYS

Question:

Show how to represent the graph using:

• Vertex and Edge list representation

• Adjacency list representation

• Adjacency matrix representation (call 'A' vertex 0, 'B' vertex 1, etc.)

Tutorial 11: Graph Theory 6

Page 5: TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1. •Ghas nlists, and each list has a length nas well. Challenge Question: On your own,

QUESTION 1 ANS:VERTEX AND EDGE LIST REPRESENTATION

Tutorial 11: Graph Theory 7

V = ['A','B','C','D','E','F','G']

E = [['A','B'], ['A','C'],['B','C'], ['B','D'],['C','E'], ['E','F'],['E','G']]

• Each pair only appears once.

Page 6: TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1. •Ghas nlists, and each list has a length nas well. Challenge Question: On your own,

QUESTION 1 ANS:ADJACENCY LIST

Tutorial 11: Graph Theory 8

{'A':['B','C'],'B':['A','C','D'],'C':['A','B','E'],'D':['B'],'E':['C','F','G'],'F':['E'], 'G':['E']}

• Key: label of the vertex• Value: List of adjacent vertices

(neighbours)

Page 7: TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1. •Ghas nlists, and each list has a length nas well. Challenge Question: On your own,

QUESTION 1 ANS:ADJACENCY MATRIX REPRESENTATION

Tutorial 11: Graph Theory 9

'''A B C D E F G '''[[0,1,1,0,0,0,0], #A[1,0,1,1,0,0,0], #B[1,1,0,0,1,0,0], #C[0,1,0,0,0,0,0], #D[0,0,1,0,0,1,1], #E[0,0,0,0,1,0,0], #F[0,0,0,0,1,0,0]] #G

Page 8: TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1. •Ghas nlists, and each list has a length nas well. Challenge Question: On your own,

QUESTION 2A: DRAW THE GRAPHDraw the graph corresponding to the following adjacency list.

{'A': ['B','C'],

'B': ['A','D','E','F'],

'C': ['A'],

'D': ['B','E'],

'E': ['B','D','F'],

'F': ['B','E']}

Tutorial 11: Graph Theory 10

Page 9: TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1. •Ghas nlists, and each list has a length nas well. Challenge Question: On your own,

QUESTION 2A ANS:ADJACENCY LIST

Tutorial 11: Graph Theory 11

Page 10: TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1. •Ghas nlists, and each list has a length nas well. Challenge Question: On your own,

QUESTION 2B:DRAW THE GRAPHDraw the graph corresponding to the following adjacency matrix.

[[0,1,0,0,0,0,0],

[1,0,1,1,0,0,0],

[0,1,0,1,0,0,0],

[0,1,1,0,0,0,0],

[0,0,0,0,0,1,0],

[0,0,0,0,1,0,0],

[0,0,0,0,0,0,0]]

Tutorial 11: Graph Theory 12

Page 11: TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1. •Ghas nlists, and each list has a length nas well. Challenge Question: On your own,

QUESTION 2B ANS:ADJACENCY MATRIX

Tutorial 11: Graph Theory 13

Page 12: TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1. •Ghas nlists, and each list has a length nas well. Challenge Question: On your own,

REVIEW: TRAVERSALS• Traversals:

– Finding all connected vertices, starting from A

• Two approaches– Breadth-first search (from starting vertex, then

neighbours, then neighbours of neighbours, etc.) Note that neighbours need not be processed in a particular order

– Depth-first search (from starting vertex follow path as far as possible, back up to closest unvisited neighbour, repeatedly)

Fall 2018 Tutorial 11: Graph Theory 14

Page 13: TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1. •Ghas nlists, and each list has a length nas well. Challenge Question: On your own,

QUESTION 3A

Fall 2018 Tutorial 11: Graph Theory 15

• Perform bfs and dfs traversals for the following graphs.• Starting from A and E

Graph 1 Graph 2

Bfs: D, B, A, C, E, G, FDfs: D, B, C, E, G, F, A

Ex:

Page 14: TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1. •Ghas nlists, and each list has a length nas well. Challenge Question: On your own,

QUESTION 3BRecursive implementation of dfs traversal

def dfs(graph, v):

visited = []

return visit(graph, v, visited)

def visit(g, v, all):

all.append(v)

for neighbour in g[v]:

if neighbour not in all:

visit(g, neighbour, all)

return all

Fall 2018 Tutorial 11: Graph Theory 16

Page 15: TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1. •Ghas nlists, and each list has a length nas well. Challenge Question: On your own,

QUESTION 4A:VERTICES_COUNTWrite the function vertices_count that consumes a nonempty graph G (stored as an adjacency list) and returns the number of vertices in G.

Note that for adjacency list:• The vertices labels are keys in dictionary• Paired values are lists with neighbours (its adjacent vertices)

Example:

G1 = {1:[2,5], 2:[1,3], 3:[2], 4:[5], 5:[1,4]}

vertices_count(G1) => 5

Tutorial 11: Graph Theory 17

Page 16: TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1. •Ghas nlists, and each list has a length nas well. Challenge Question: On your own,

QUESTION 4BEDGES_COUNTWrite the function edges_count that consumes a nonempty graph G(stored as an adjacency list) and returns the number of edges in G.

Examples:G1 = {1:[2,5], 2:[1,3], 3:[2], 4:[5], 5:[1,4]}

G2 = {1:[2,4], 2:[1,3,4,5], 3:[2,5], 4:[1,2], 5:[2,3], 6:[]}

edges_count(G1) => 4

edges_count(G2) => 6

Tutorial 11: Graph Theory 18

Page 17: TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1. •Ghas nlists, and each list has a length nas well. Challenge Question: On your own,

QUESTION 5: DEGREE_ADJ_MATWrite the function degree_adj_mat that consumes a nonempty graph G (stored as an adjacency matrix) and a vertex number v, and returns the degree of vertex v in G.

Note that for adjacency matrix:• the vertices are numbered 0,1, …, n-1.• G has n lists, and each list has a length n as well.

Challenge Question:On your own, implement the functions degree_adj_list and degree_edges, to determine the degree of a vertex using the other representations.

Tutorial 11: Graph Theory 19

Page 18: TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1. •Ghas nlists, and each list has a length nas well. Challenge Question: On your own,

QUESTION 6A:LIST_DICTIONARYWrite the function list_dictionary that consumes a graph G (stored as an adjacency list), and returns a list of edges. Edge should be in the format of [a, b]where a < b.

Examples:

G1 = {1:[2,5], 2:[1,3,5], 3:[2,4], 4:[3,5,6], 5:[1,2,4], 6:[4]}

list_dictionary(G1) => [[1,2], [1,5], [2,3], [2,5], [3,4], [4,5], [4,6]]

Tutorial 11: Graph Theory 20

Page 19: TUTORIAL 11 - University of Waterloocs116/... · •the vertices are numbered 0,1, …, n-1. •Ghas nlists, and each list has a length nas well. Challenge Question: On your own,

QUESTION 6B:ADMATRIX_DICTIONARYWrite the function admatrix_dictionary that consumes a graph G (stored as an adjacency list), and returns the graph which is stored as an adjacency matrix.

Examples:G1 = {1:[2,5], 2:[1,3,5], 3:[2,4], 4:[3,5,6],

5:[1,2,4], 6:[4]}admatrix_dictionary(G1) => [[0,1,0,0,1,0],[1,0,1,0,1,0], [0,1,0,1,0,0],

[0,0,1,0,1,1], [1,1,0,1,0,0], [0,0,0,1,0,0]]

Note: row 0 is for vertex 1Tutorial 11: Graph Theory 21