Graph
Lecture 24 - March 14th, 2017
Graph Algorithms
What is a graph?
- A graph is a mathematical tool used to represent a structured system
- It is made up of
- Node or Vertices (circles)
- Edges (lines)

- Graphs can have
- Paths
- There is a path from A to F
- Cycles
- A path that loops back on itself
- Paths
-
Nodes can have
- Neighbours
- Connected via edge
- Neighbours
-
Graphs are useful for representing multiple real world problems
- Social networks
- Internet
- Power grids
-
Google's Page rank algorithm uses a graph that represents the entire internet, and the links between pages.
-
Some graphs are trees
- A graph is a tree if it contains no cycles

Graph Algorithms
- Searching: visit all node of a graph
- Breadth first search (BFS)
- Use a queue
- Depth first search (DFS)
- Use a stack
- Breadth first search (BFS)
Queue vs stack
- Queue
- Like a line at the grocery store
- First in first out (FIFO)
- Like a line at the grocery store
- Stack
- Like a stack of waffles
- First in last out (FILO)
- Like a stack of waffles
Depth first search
- Put start a node in stack, add to result, mark it as visited
- While stack is not empty
- Look at node at top of stack, call it V
- If V has unvisited neighbours:
- Select alphabeticallyy next unvisited neighbour, call it U
- Add U to reseult
- Mark U as visited
- add U to stack
- Else remove V from stack
- Select alphabeticallyy next unvisited neighbour, call it U
Example:

Stack -D- -> -E- -> -C- -> -F- -> -B- -> -A-
Result: A B F C E D
Visited: -A- -B- -C- -D- -E- -F-
Breadth First Search
- Put start node in queue, add to result, mark as visited
- While queue is not empty:
- Remove first node from queue, call it V, the current working node
- For all neighbors U of V, in alphabe2cal order:
- If U is unvisited:
- Add U to result
- Mark U as visited
- Add U to queue
- If U is unvisited:
Example:

Queue -A- -B- -C- -D- -F- -E-
Result A B C D F E
Visited -A- -B- -C- -D- -E- -F-
Lecture 25 - March 15th, 2017
Dijkstra's Shortest Path Alg
- Given a graph with weighted edges
- i.e. each edge has an associated number (weight)
-
Find the shortest path from tart node "S" to every other node in the graph.
-
To start: distance from start S to self is 0, and previous node is N/A, all other distances ∞
- While there are no unprocessed nodes
- Choose the unprocessed node U with smallest distance D to start node, break 2es with alphabe2cal order
- For all neighbors V of U
- If (best dist S -> V) > ( D + distance U->V)
- Set best dist S -> V = (D + distance U->V)
- Set prev node for V to U
- If (best dist S -> V) > ( D + distance U->V)
- Mark U as processed
Example:

Current Vertex:
Distance to start:
| Vertex | Processed? | Best know distance | Previous vertex |
|---|---|---|---|
| S | |||
| A | |||
| B | |||
| C | |||
| D | |||
| E | |||
| F |
Current Vertex: Init
Distance to start:
| Vertex | Processed? | Best know distance | Previous vertex |
|---|---|---|---|
| S | x | 0 | N/A |
| A | x | Infinity | |
| B | x | Infinity | |
| C | x | Infinity | |
| D | x | Infinity | |
| E | x | Infinity | |
| F | x | Infinity |
Current Vertex: S
Distance to start: 0
| Vertex | Processed? | Best know distance | Previous vertex |
|---|---|---|---|
| S | ✓ | 0 | N/A |
| A | x | 8 | S |
| B | x | 10 | S |
| C | x | 7 | S |
| D | x | Infinity | |
| E | x | Infinity | |
| F | x | Infinity |
| Distance U -> V | Best Distance | |
|---|---|---|
| A | 8 | Infinity |
| B | 10 | Infinity |
| C | 7 | Infinity |
Current Vertex: C
Distance to start: 7
| Vertex | Processed? | Best know distance | Previous vertex |
|---|---|---|---|
| S | ✓ | 0 | N/A |
| A | x | 8 | S |
| B | x | 10 | S |
| C | ✓ | 7 | S |
| D | x | Infinity | |
| E | x | Infinity | |
| F | x | 8 | c |
| Distance U -> V | Best Distance | |
|---|---|---|
| S | 7 | 0 |
| F | 1 | Infinity |
Current Vertex: A
Distance to start: 8
| Vertex | Processed? | Best know distance | Previous vertex |
|---|---|---|---|
| S | ✓ | 0 | N/A |
| A | ✓ | 8 | S |
| B | x | 9 | A |
| C | ✓ | 7 | S |
| D | x | 28 | A |
| E | x | Infinity | |
| F | x | 8 | C |
| Distance U -> V | Best Distance | |
|---|---|---|
| S | 8 | 0 |
| B | 1 | 10 |
| D | 20 | Infinity |
Current Vertex: F
Distance to start: 8
| Vertex | Processed? | Best know distance | Previous vertex |
|---|---|---|---|
| S | ✓ | 0 | N/A |
| A | ✓ | 8 | S |
| B | x | 9 | A |
| C | ✓ | 7 | S |
| D | x | 28 | A |
| E | x | 13 | F |
| F | ✓ | 8 | C |
| Distance U -> V | Best Distance | |
|---|---|---|
| B | 7 | 9 |
| C | 1 | 7 |
| E | 5 | Infinity |
Current Vertex: B
Distance to start: 9
| Vertex | Processed? | Best know distance | Previous vertex |
|---|---|---|---|
| S | ✓ | 0 | N/A |
| A | ✓ | 8 | S |
| B | ✓ | 9 | A |
| C | ✓ | 7 | S |
| D | x | 28 | A |
| E | x | 13 | F |
| F | ✓ | 8 | C |
| Distance U -> V | Best Distance | |
|---|---|---|
| S | 10 | 0 |
| A | 1 | 8 |
| F | 7 | 8 |
| E | 9 | 13 |
Current Vertex: E
Distance to start: 13
| Vertex | Processed? | Best know distance | Previous vertex |
|---|---|---|---|
| S | ✓ | 0 | N/A |
| A | ✓ | 8 | S |
| B | ✓ | 9 | A |
| C | ✓ | 7 | S |
| D | x | 20 | E |
| E | ✓ | 13 | F |
| F | ✓ | 8 | C |
| Distance U -> V | Best Distance | |
|---|---|---|
| B | 9 | 9 |
| F | 5 | 8 |
| D | 7 | 28 |
Current Vertex: D
Distance to start: 20
| Vertex | Processed? | Best know distance | Previous vertex |
|---|---|---|---|
| S | ✓ | 0 | N/A |
| A | ✓ | 8 | S |
| B | ✓ | 9 | A |
| C | ✓ | 7 | S |
| D | ✓ | 20 | E |
| E | ✓ | 13 | F |
| F | ✓ | 8 | C |
| Distance U -> V | Best Distance | |
|---|---|---|
| A | 20 | 8 |
| E | 7 | 13 |
Solution:
E <- F <- C <- S
D <- E <- F <- C <- S
- Each row in video corresponds to one of our tables
- Highligh2ng is the same as checking a row in col 2
- Col 3 and 4 are what get wriden in each col of a row in the video. s