/
Graphs  2 Kevin Kauffman Graphs  2 Kevin Kauffman

Graphs 2 Kevin Kauffman - PowerPoint Presentation

debby-jeon
debby-jeon . @debby-jeon
Follow
377 views
Uploaded On 2018-03-11

Graphs 2 Kevin Kauffman - PPT Presentation

CS 309s Problem We have sprinklers in our yard which need to be connected with pipe Assuming pipes may only intersect at sprinkler heads what is the minimum amount of pipe we need to connect the sprinklers ID: 646626

nodes node distance edges node nodes edges distance set edge add find start length treeset connected returns minimum dist

Share:

Link:

Embed:

Download Presentation from below link

Download Presentation The PPT/PDF document "Graphs 2 Kevin Kauffman" is the property of its rightful owner. Permission is granted to download and print the materials on this web site for personal, non-commercial use only, and to display it on your personal computer provided you do not modify the materials and that you retain all copyright notices contained in the materials. By downloading content from our website, you accept the terms of this agreement.


Presentation Transcript

Slide1

Graphs 2

Kevin Kauffman

CS 309sSlide2

Problem

We have sprinklers in our yard which need to be connected with pipe. Assuming pipes may only intersect at sprinkler heads, what is the minimum amount of pipe we need to connect the sprinklers?Slide3

Minimum Spanning Tree

Set of edges which

Connect all the nodes

Has the minimum total weight of all edges

Contains no cycles

If there are multiple MSTs for a given graph, they all contain the same individual edge weights

If on an

xy

plane, it will not self intersectSlide4

Calculating the MST

Create a set of connected nodes

Add a random node to “seed” the set

While the set doesn’t contain all nodes

Find the shortest edge which goes from a node in the set to a node out of the set

Add the edge to the MST and the other node to the setSlide5

Implementation

Naïve: iterate through all edges in each cycle, and take the minimum which satisfies the in/out requirement

O(V*E)

Better: maintain sorted list of edges which touch the nodes in the set, add to it as we go

O(E*log(E))Slide6

Maintaining Sorted List

Use

int

[2] or

java.awt.point

to represent edges

Place them on a

TreeSet

when we see them, which will sort them in the order specified by our:

Custom ComparatorSlide7

Custom Comparator

Takes input A and B; returns an

int

Returns positive if A comes before B

Returns 0 if A is the same as B

Returns negative if A comes after B

Rules:

Commutative: if comp(A,B)<0, then comp(B,A)>0

MUST break ties (or comparator will think A and B are the same and delete one of them)

This must still adhere to rule 1Slide8

Shortest Distance

BFS allows us to calculate distance in

unweighted

graphs, how do we do it in weighted graphs?

For an edge of length n, insert n-1 “fake” nodes, so all edges are length 1

Graph is now

unweighted

Run BFS!Slide9

A Better Way

If we add nodes proportional to edge length, runtime now depends on edge length (bad for long edges)

Instead of iterating over all the fake nodes can we calculate the “real” node which we are going to reach next?Slide10

Dijkstra’s Algorithm

Lemma: if we are at a node, we can calculate the next node BFS would visit by comparing edge lengths

Start at start node

Sort edges from start node to find next node visited (second node)

How do we find the

the

third node, since it could be connected to the second node, but not the start node?Slide11

Dijkstra’s Algorithm

Because of Lemma, we can calculate the distance from the second node to all the nodes its connected to

Total distance to those nodes is distance(2

nd

node) + weight(edge)

EXCEPT if we had a shorter distance directly from the start node

Sort all those distances and find the actual third node visited

REPEATSlide12

Dijkstra’s TL-DR

Tree set of nodes by distance

Pop shortest remaining distance (u), make it permanent

for all edges from u to an unvisited node (v), if dist(u)+dist(

uv

)<dist(v), update dist(v)

O((E+V)log(E)), doesn’t depend on edge lengthSlide13

Implementation

Array storing distances (must be final since we reference it in the

compartor

)

Treeset

sorting unvisited nodes by distance

Every time we pop a node and check all its edges, if we find that ends up being less than current distance:

Remove that node from the

treeset

Update its value

Add it to the

treeset

TREESET DOESN’T LIKE VALUES CHANGED UNDER IT