Graph Clustering With Missing Data : Convex Algorithms and Analysis
Algorithms and Data Structures for Data Science Graph ...
Transcript of Algorithms and Data Structures for Data Science Graph ...
Department of Computer Science
Algorithms and Data Structures for Data Science
CS 277 Brad Solomon
November 8, 2021
Graph Traversals
Final Project Mid-Project Check-ins
Mid-project check-ins start next week (November 8th-12th)!
Proposal resubmissions due November 5th
To sign up for a mid-project meeting time:
https://bit.ly/3GzmC3P
Learning Objectives
Introduce graph coloring and graph traversals
Identify utility of traversal labelings
Define key graph functions and discuss implementation details
Graph Implementation: Adjacency Matrix
v
u
w z
u
v
w
z
Vertex Storage:
Edge Storage:
u v w z
u 0 1 1 0
v 1 0 1 0
w 1 1 0 1
z 0 0 1 0
Graph Coloring
An optimal solution can be found — but is NP-complete
Heuristic algorithms have no guarantees (but are usually fast)
Our heuristic has an upper bound but not a clear lower bound
Traversal: Objective: Visit every vertex and every edge in the graph.
Purpose: Search for interesting sub-structures in the graph.
We’ve seen traversal before ….but it’s different:
• Ordered • Obvious Start •
• • •
Traversal: BFS
G H F E D C B A
v d P Adjacent Edges
A 0 - B C D
B 1 A A C E
C 1 A A B D E F
D 1 A A C F H
E 2 C B C G
F 2 C C D G
G 3 E E F H
H 2 D D G
A
C D
E
B
G H
F
Traversal: BFS
G H F E D B C A
v d P Adjacent Edges
A 0 - C B D
B 1 A A C E
C 1 A A B D E F
D 1 A A C F H
E 2 C B C G
F 2 C C D G
G 3 E E F H
H 2 D D G
A
C D
E
B
G H
F
class vertObj(): def __init__(self, v): self.val = v self.eList = []
# Added for BFS self.visited = 0 self.pred = None self.dist = -1
1 2 3 4 5 6 7 8 9
10 11 12
class edgeObj(): def __init__(self, e): self.v2 = e self.parallel = None
# Added for BFS self.label = 0
1 2 3 4 5 6 7 8 9
10 11 12
BFS AnalysisQ: What do we do if we have a disjoint graph?
Q: Does our implementation detect a cycle?
Q: What is the running time?
Running time of BFS
G H F E D B C A
v d P Adjacent Edges
A 0 - C B D
B 1 A A C E
C 1 A B A D E F
D 1 A A C F H
E 2 C B C G
F 2 C C D G
G 3 E E F H
H 2 D D G
A
C D
E
B
G H
F
BFS ObservationsQ: What is a shortest path from A to H?
Q: What is a shortest path from E to H?
Q: How does a cross edge relate to d?
Q: What structure is made from discovery edges?
v d P Adjacent Edges
A 0 - C B D
B 1 A A C E
C 1 A B A D E F
D 1 A A C F H
E 2 C B C G
F 2 C C D G
G 3 E E F H
H 2 D D G
A
C D
E
B
G H
F
BFS ObservationsObs. 1: BFS can be used to count components.
Obs. 2: BFS can be used to detect cycles.
Obs. 3: In BFS, d provides the shortest distance to every vertex.
Obs. 4: In BFS, the endpoints of a cross edge never differ in distance, d, by more than 1: |d(u) − d(v) | ≤ 1
def DFS_recur(self, s): self.V[s].visited = 1
el = self.getEdges(s) for e in el: l = e.label v = self.V[l] if v.visited == 0: self.DFS_recur(l)
1 2 3 4 5 6 7 8 9
10 11 12 13 14 15 16 17 18 19 20 21 22
Traversal: DFS
DFS ObservationsObs. 1: DFS can be used to count components.
Obs. 2: DFS can be used to detect cycles.
Obs. 3: In DFS, distance provides no clear meaning
“The Muddy City” by CS Unplugged, Creative Commons BY-NC-SA 4.0