17
COMP26120: Algorithms and Imperative Programming Graph Algorithms Lecture 3: Shortest paths

COMP26120: Algorithms and Imperative Programming Graph ...syllabus.cs.manchester.ac.uk/ugt/2018/COMP26120/... · Dijkstra’s algorithm • Greedy procedure deploys edge relaxation,

  • Upload
    others

  • View
    13

  • Download
    0

Embed Size (px)

Citation preview

Page 1: COMP26120: Algorithms and Imperative Programming Graph ...syllabus.cs.manchester.ac.uk/ugt/2018/COMP26120/... · Dijkstra’s algorithm • Greedy procedure deploys edge relaxation,

COMP26120: Algorithms and Imperative Programming

Graph Algorithms Lecture 3: Shortest paths

Page 2: COMP26120: Algorithms and Imperative Programming Graph ...syllabus.cs.manchester.ac.uk/ugt/2018/COMP26120/... · Dijkstra’s algorithm • Greedy procedure deploys edge relaxation,

Lecture outline

• Single source shortest paths in a weighted graph;• Dijkstra’s algorithm;• The Bellman-Ford algorithm;• Shortest path in directed acyclic graphs;• All-pairs shortest paths;

05/02/2019Page 2

Page 3: COMP26120: Algorithms and Imperative Programming Graph ...syllabus.cs.manchester.ac.uk/ugt/2018/COMP26120/... · Dijkstra’s algorithm • Greedy procedure deploys edge relaxation,

Single source shortest paths

• Many systems in real world can be represented as weighted graphs (road/railway network, computer network, social networks, complex systems).

• In general, a weighted graph is a graph that has a numeric label !(#) associated with each edge #.

• Edge weights represent a concept such as distance, connection costs, or affinity.

05/02/2019Page 3

Page 4: COMP26120: Algorithms and Imperative Programming Graph ...syllabus.cs.manchester.ac.uk/ugt/2018/COMP26120/... · Dijkstra’s algorithm • Greedy procedure deploys edge relaxation,

Single source shortest paths

05/02/2019Page 4

47

2

56

8

1 0.5

Page 5: COMP26120: Algorithms and Imperative Programming Graph ...syllabus.cs.manchester.ac.uk/ugt/2018/COMP26120/... · Dijkstra’s algorithm • Greedy procedure deploys edge relaxation,

Single source shortest paths

• Let ! be a weighted graph. The length "($) of a path $ ='(, '*, … , ', is defined as

" $ = -./(

,"('0)

• We need to ensure that all the weights in the graph are non-negative, so that no negative cycles in the graph exist.

• The problem: For a given weighted graph ! find the shortest paths from a selected node 1 to all other nodes.

• For the case with no negative edge weights these exists a greedy strategy referred to as Dijkstra’s algorithm.

• Dijkstra’s algorithm is performing a weighted BFS starting at the node 1.

05/02/2019Page 5

Page 6: COMP26120: Algorithms and Imperative Programming Graph ...syllabus.cs.manchester.ac.uk/ugt/2018/COMP26120/... · Dijkstra’s algorithm • Greedy procedure deploys edge relaxation,

Dijkstra’s algorithm

• The greedy method iteratively grows a “cloud” of vertices out of ! , with the vertices entering the cloud in based on increasing distances from !.

• At each iteration, the next chosen vertex the one outside the cloud that is closest to !.

• The algorithm terminates when no more vertices are outside the cloud, at which point we have a shortest path from v to every other vertex of ".

• Our presentation will be for a graph that is undirected and has no self loops or parallel edges.

• We use the approximation to the true distance between the two nodes which is iteratively improved until its true value is obtained.

05/02/2019Page 6

Page 7: COMP26120: Algorithms and Imperative Programming Graph ...syllabus.cs.manchester.ac.uk/ugt/2018/COMP26120/... · Dijkstra’s algorithm • Greedy procedure deploys edge relaxation,

Dijkstra’s algorithm

• Greedy procedure deploys edge relaxation, where for each node ! ≠ # a label $[!] is assigned with an initial value +∞. During the course of the algorithm, this label holds current approximation of the shortest path length between ! and #.

• We define a cloud C of visited nodes to be initially an empty set.• At each iteration we pull out a node with the smallest $[!] and

update those $[*] for the nodes * that are adjacent to !. This update should reflect the fact that there is a better way to get to * via the node ! than previously determined.

if $ ! + + !, * < $[*] then$ ! + + !, * → $[*]

05/02/2019Page 7

Page 8: COMP26120: Algorithms and Imperative Programming Graph ...syllabus.cs.manchester.ac.uk/ugt/2018/COMP26120/... · Dijkstra’s algorithm • Greedy procedure deploys edge relaxation,

Dijkstra’s algorithm

Algorithm DijkstraShortestPaths(!, #);Input: A simple undirected weighted graph ! with nonnegative edge

weights, and a distinguished vertex # of !; Output: Labels $ % for all % ∈ !, representing the distances from # to %;$ # = 0; $ % = +∞ for all % ≠ # in !;Set a priority queue - to contain all vertices % ∈ ! using $ % as keys;while (Q is not empty) do

% ← -.removeMin(); // pull a new vertex into the cloudfor (each vertex 0 adjacent to % && 0 ∈ -) do

if $ % + 1 %, 0 < $[0] then$ % + 1 %, 0 → $[0]; // perform the relaxation on edge (%, 0)

end ifend for

end whilereturn the labels $ % of each vertex %

05/02/2019Page 8

Page 9: COMP26120: Algorithms and Imperative Programming Graph ...syllabus.cs.manchester.ac.uk/ugt/2018/COMP26120/... · Dijkstra’s algorithm • Greedy procedure deploys edge relaxation,

Dijkstra’s algorithm

• Complexity analysis: Denote by ! and " the number of nodes and the number of edges in a graph #, respectively.

• The assumption is that edge weight additions and comparisons are the basic operations that take %(1) time.

• We also assume that the graph # is represented by an adjacency list. The cost of sweeping the vertices This data structure allows us to step through the vertices adjacent to ) during the relaxation step is proportional to their number.

• How is the priority queue * implemented? We can implement a PQ either as a sorted list or as a heap. In the latter case the cost of performing the method Q.removeMin() is % log ! -- recall up/down heap bubbling.

05/02/2019Page 9

Page 10: COMP26120: Algorithms and Imperative Programming Graph ...syllabus.cs.manchester.ac.uk/ugt/2018/COMP26120/... · Dijkstra’s algorithm • Greedy procedure deploys edge relaxation,

Dijkstra’s algorithm

• The cost of inserting ! vertices in " with their initial key value is #(! % log ! ).

• At each of the ! iterations of the while loop we spend #(log(!)time performing Q.removeMin() and #(deg , % log ! ) time to perform the relaxation procedure on the edges incident on ,.

• The overall running time of the while loop is

-.∈0

(1 + deg , ) % log(!) = #( ! + 4 % log ! )

since ∑.∈0 deg(,) = 24.• If the PQ is implemented as an unsorted doubly linked list. Such

implementation would result in #(!7) complexity (Homework: work out the details in Goodrich & Tamasia, p.406).

05/02/2019Page 10

Page 11: COMP26120: Algorithms and Imperative Programming Graph ...syllabus.cs.manchester.ac.uk/ugt/2018/COMP26120/... · Dijkstra’s algorithm • Greedy procedure deploys edge relaxation,

Dijkstra’s algorithm

05/02/2019Page 11

4 7

2

56

8

1 0.5

! +∞ +∞ +∞ +∞ +∞A B C D E F G

+∞

Step 1: Remove A from PQ

+∞ +∞ +∞ 4 +∞ +∞B C D E F G

Step 2: Remove E from PQ

11 +∞ +∞ 6 5

B C D F G

Page 12: COMP26120: Algorithms and Imperative Programming Graph ...syllabus.cs.manchester.ac.uk/ugt/2018/COMP26120/... · Dijkstra’s algorithm • Greedy procedure deploys edge relaxation,

Dijkstra’s algorithm

05/02/2019Page 12

4 7

2

56

8

1 0.5

Step 3: Remove G from PQ

11 +∞ +∞ 5.5B C D F

Step 4: Remove F from PQ

10.5 +∞ 13.5B C D

Step 5: Remove B from PQ

+∞ 13.5C D

Step 6: Remove D from PQ

19.5C# = 0,10(), 19(), 13(), 4,5(), 5

Page 13: COMP26120: Algorithms and Imperative Programming Graph ...syllabus.cs.manchester.ac.uk/ugt/2018/COMP26120/... · Dijkstra’s algorithm • Greedy procedure deploys edge relaxation,

The Bellman-Ford algorithm

• This algorithm finds the shortest paths in directed graphs which have negative edge weights.

• The Bellman-Ford algorithm shares the edge relaxation with Dijkstra’s algorithm, but does not use it in conjunction with the greedy method. Instead, it performs the relaxation of each edge in a digraph ! − 1 times, where ! is the number of nodes.

• The shortest paths between the nodes are calculated in a bottom-up manner, where after each iteration $ = 1,… , ! − 1) we have the shortest paths of the length at most $ between all pairs of nodes.

05/02/2019Page 13

Page 14: COMP26120: Algorithms and Imperative Programming Graph ...syllabus.cs.manchester.ac.uk/ugt/2018/COMP26120/... · Dijkstra’s algorithm • Greedy procedure deploys edge relaxation,

The Bellman-Ford algorithm

Algorithm BellmanFordShortestPaths (!, #);Input: A weighted directed graph ! with $ vertices, and a

distinguished vertex # ∈ !; Output: Labels & ' for all ' ∈ !, representing the distances from # to '

or an indication that ! has a negative-weight cycle;& # = 0; & ' = +∞ for all ' ≠ # in !;for . = 1: $ − 1 do

for each directed edge (', 3) outgoing from ' doif & ' + 5 ', 3 < &[3] then& ' + 5 ', 3 → &[3]; // perform the relaxation on edge (', 3)

end ifend for

end forif for any pair of nodes ', # we have & # >& ' + 5 ', # then

return ! contains a negative-weight cycle;else

return & ' for all ' ∈ !;end if 05/02/2019

Page 15: COMP26120: Algorithms and Imperative Programming Graph ...syllabus.cs.manchester.ac.uk/ugt/2018/COMP26120/... · Dijkstra’s algorithm • Greedy procedure deploys edge relaxation,

The Bellman-Ford algorithm

B

A E

C D

4

-1

3 2 1

5

2

-3

A B C D E0 +∞ +∞ +∞ +∞

# = 5, the edges need to be processed 4 times

Iteration 1:

We process the edges in the following order:(B,E), (D,B), (B,D), (A,B), (A,C), (D,C), (B,C), (E,D)

A B C D E0 −1 +∞ +∞ +∞

After processing (B,E), (D,B), (B,D), (A,B)

After processing (A,C)A B C D E0 −1 4 +∞ +∞

After processing (D,C), (B,C), (E,D)A B C D E0 −1 2 +∞ +∞

Page 16: COMP26120: Algorithms and Imperative Programming Graph ...syllabus.cs.manchester.ac.uk/ugt/2018/COMP26120/... · Dijkstra’s algorithm • Greedy procedure deploys edge relaxation,

The Bellman-Ford algorithm

B

A E

C D

4

-1

3 2 1

5

2

-3

! = 5, the edges need to be processed 4 times

Iteration 2:

After processing (B,E), (D,B), (B,D), (A,B)

A B C D E0 −1 2 1 1

After processing (A,C), (D,C), (B,C), (E,D)

A B C D E0 −1 2 −2 1

Iterations 3 and 4 do not produce any changes (check)

Homework: Change the weight -3 in thegraph into -4 and rerun the algorithm.

Page 17: COMP26120: Algorithms and Imperative Programming Graph ...syllabus.cs.manchester.ac.uk/ugt/2018/COMP26120/... · Dijkstra’s algorithm • Greedy procedure deploys edge relaxation,

The Bellman-Ford algorithm

• The complexity of the Bellman-Ford algorithm:– The main loop is performed ! − 1 times.– During the loop all $ edges are visited.– Each edge is processed in % 1 time.

• The complexity time for this algorithm is %(! ' $).

05/02/2019Page 17