Divide and Conquer
Explore the divide and conquer technique to efficiently solve the all-pairs shortest paths problem in graphs. Understand how Fischer-Meyer and Leyzorek algorithms improve Bellman-Ford by using dynamic programming and recursion strategies. This lesson helps you grasp the theory and implementation of these advanced shortest path algorithms for better problem-solving in Python.
We'll cover the following...
Improving Bellman-Ford algorithm
Now let’s look at how we can make a more significant improvement, suggested by Michael Fischer and Albert Meyer in 1971. Bellman’s recurrence breaks the shortest path into a slightly shorter path and a single edge by considering all possible predecessors of the target vertex. Instead, let’s break the shortest paths into two shorter shortest paths at the middle vertex. This idea gives us a different recurrence for the same function . Here we need to stop at the base case instead of because a path with at most one edge has no “middle” vertex. To simplify the recurrence slightly, let’s define for every vertex .
As stated, this recurrence only works when is a power of , since otherwise, we might try to find the shortest path with (at most) a fractional number of edges! But that’s not really a problem; is the true shortest path distance from to for all ...