All-Pairs Shortest Paths(APSP) via fast matrix multiplication


http://www.diku.dk/PATH05/Uri1.pdf
Strassen’s nn algorithm
View each nn matrix as a 22 matrix whose elements are n/2n/2 matrices.
Apply the 22 algorithm recursively.
T(n) = 7 T(n/2) + O(n^2)
T(n) = O(nlog7/log2)=O(n2.81)

http://cs.anu.edu.au/people/Alistair.Rendell/Teaching/apac_comp3600/module4/all_pairs_shortest_paths.xhtml

1  The representation of G

The input is an n×n matrix W=( wij ).

w(i,j)={ 0 if i=j the weight of the directed edge i,j if ij and i,jE  if ij and i,jE

Algorithms for the APSP problem

  • Matrix Multiplication / Repeated Squaring
  • The Floyd-Warshall Algorithm
  • Transitive Closure of a Graph

3  Matrix Multiplication Algorithm

http://kodu.ut.ee/~eero/PC/Lecture16.pdf
• Consider the multiplication of the weighted adjacency matrix with itself - except,
in this case, we replace the multiplication operation in matrix multiplication by
addition, and the addition operation by minimization
• Notice that the product of weighted adjacency matrix with itself returns a matrix
that contains shortest paths of length 2 between any pair of nodes
• It follows from this argument that A^n contains all shortest paths

The algorithm is based on dynamic programming, in which each major loop will invoke an operation that is very similar to matrix multiplication. Following the DP strategy, the structure of this problem is, for any two vertices u and v,
  1. if u=v, then the shortest path p from u to v is 0.
  2. otherwise, decompose p into uxv, where p' is a path from u to x and contains at most k edges and it is the shortest path from u to x.
A recursive solution for the APSP problem is defined. Let dij (k) be the minimum weight of any path from i to j that contains at most k edges.
  1. If k=0, then

    dij (0) ={ 0 if i=j  if ij

  2. Otherwise, for k1dij (k) can be computed from dij (k-1) and the adjacency matrix w.
    dij (k) =min{ dij (k-1) , min1ln { dil (k-1) + wlj }}= min1ln { dil (k-1) + wlj }
SPECIAL-MATRIX-MULTIPLY (A,B)
 1     n   rows [A]
 2     C  new n×n matrix
 3    for  i   1 to  n
 4             do for  j   1 to  n
 5                            do  cij   
 6                                  for  k   1 to  n
 7                                           do  cij   min( cij , aik + bkj )
 .                                                    /* Here's where this algorithm */
 .                                                    /* differs from MATRIX-MULTIPLY. */
 8    return  C
The optimal solution can be computed by calling SPECIAL-MATRIX-MULTIPLY ( D(k) ,W) for 1kn-2. We only need to run to n-2 because that will give us D(n-1) giving us all the shortest path lengths of at most n-1 edges (you only need n-1 edges to connect n vertices). Since SPECIAL-MATRIX-MULTIPLY is called n-2 times, the total running time is O( n^4 ).

3.1  The repeated squaring method

Since each D(k) matrix contains the shortest paths of at most k edges, and W really is D(1) , all we were doing in the earlier solution was going: "Given the shortests paths of at most length k, and the shortests paths of at most length 1, what is the shortests paths of at most length k+1?"
This situation is ripe for improvement. The repeated squaring method rephrases the question to: "Given the shortests paths of at most length k, what is the shortests paths of at most length k+k?" The correctness of this approach lies in the observation that the shortests paths of at most m edges is the same as the shortest paths of at most n-1 edges for all m>n-1. Thus:
D(1) =W
D(2) = W2 =W.W
D(4) = W4 = W2 . W2 
:
D( 2log(n-1) ) = W( 2log(n-1) ) = W( 2log(n-1) -1) . W( 2log(n-1) -1) 
Using repeated squaring, we only need to run SPECIAL-MATRIX-MULTIPLY log(n-1) times. Hence the running time of the improved matrix multiplication is O( n3 logn).
ALL-PAIRS-SHORTEST-PATHS (W)
 1     n   rows [W]
 2     D(1)   W
 3     m   1
 4    while  m<n-1
 5                  do  D(2m)   SPECIAL-MATRIX-MULTIPLY ( D(m) , D(m) )
 6                         m   2m
 7    return  D(n)

3.2  Repeat Squaring Example

images/APSP_Example.png
Figure 1: Example graph for the Repeated Squaring method.
Take the graph in Figure 1 for example. The weights for this graph in matrix form...

W=( 05 01 803 20 )= D(1)

Repeatedly squaring this gives us...

D(1) . D(1) =( 056 9014 51303 270 )= D(2)


D(2) . D(2) =( 0569 6014 51003 2780 )= D(4)

D(4) contains the all-pairs shortest paths. It is interesting to note that at D(2) , the shortest path from 2 to 1 is 9 using the path 2,3,1. Since the final solution ( D(4) ) allows for up to 4 edges to be used, a shorter path 2,3,4,1 was found with a weight of 6.

Labels

LeetCode (1432) GeeksforGeeks (1122) LeetCode - Review (1067) Review (882) Algorithm (668) to-do (609) Classic Algorithm (270) Google Interview (237) Classic Interview (222) Dynamic Programming (220) DP (186) Bit Algorithms (145) POJ (141) Math (137) Tree (132) LeetCode - Phone (129) EPI (122) Cracking Coding Interview (119) DFS (115) Difficult Algorithm (115) Lintcode (115) Different Solutions (110) Smart Algorithm (104) Binary Search (96) BFS (91) HackerRank (90) Binary Tree (86) Hard (79) Two Pointers (78) Stack (76) Company-Facebook (75) BST (72) Graph Algorithm (72) Time Complexity (69) Greedy Algorithm (68) Interval (63) Company - Google (62) Geometry Algorithm (61) Interview Corner (61) LeetCode - Extended (61) Union-Find (60) Trie (58) Advanced Data Structure (56) List (56) Priority Queue (53) Codility (52) ComProGuide (50) LeetCode Hard (50) Matrix (50) Bisection (48) Segment Tree (48) Sliding Window (48) USACO (46) Space Optimization (45) Company-Airbnb (41) Greedy (41) Mathematical Algorithm (41) Tree - Post-Order (41) ACM-ICPC (40) Algorithm Interview (40) Data Structure Design (40) Graph (40) Backtracking (39) Data Structure (39) Jobdu (39) Random (39) Codeforces (38) Knapsack (38) LeetCode - DP (38) Recursive Algorithm (38) String Algorithm (38) TopCoder (38) Sort (37) Introduction to Algorithms (36) Pre-Sort (36) Beauty of Programming (35) Must Known (34) Binary Search Tree (33) Follow Up (33) prismoskills (33) Palindrome (32) Permutation (31) Array (30) Google Code Jam (30) HDU (30) Array O(N) (29) Logic Thinking (29) Monotonic Stack (29) Puzzles (29) Code - Detail (27) Company-Zenefits (27) Microsoft 100 - July (27) Queue (27) Binary Indexed Trees (26) TreeMap (26) to-do-must (26) 1point3acres (25) GeeksQuiz (25) Merge Sort (25) Reverse Thinking (25) hihocoder (25) Company - LinkedIn (24) Hash (24) High Frequency (24) Summary (24) Divide and Conquer (23) Proof (23) Game Theory (22) Topological Sort (22) Lintcode - Review (21) Tree - Modification (21) Algorithm Game (20) CareerCup (20) Company - Twitter (20) DFS + Review (20) DP - Relation (20) Brain Teaser (19) DP - Tree (19) Left and Right Array (19) O(N) (19) Sweep Line (19) UVA (19) DP - Bit Masking (18) LeetCode - Thinking (18) KMP (17) LeetCode - TODO (17) Probabilities (17) Simulation (17) String Search (17) Codercareer (16) Company-Uber (16) Iterator (16) Number (16) O(1) Space (16) Shortest Path (16) itint5 (16) DFS+Cache (15) Dijkstra (15) Euclidean GCD (15) Heap (15) LeetCode - Hard (15) Majority (15) Number Theory (15) Rolling Hash (15) Tree Traversal (15) Brute Force (14) Bucket Sort (14) DP - Knapsack (14) DP - Probability (14) Difficult (14) Fast Power Algorithm (14) Pattern (14) Prefix Sum (14) TreeSet (14) Algorithm Videos (13) Amazon Interview (13) Basic Algorithm (13) Codechef (13) Combination (13) Computational Geometry (13) DP - Digit (13) LCA (13) LeetCode - DFS (13) Linked List (13) Long Increasing Sequence(LIS) (13) Math-Divisible (13) Reservoir Sampling (13) mitbbs (13) Algorithm - How To (12) Company - Microsoft (12) DP - Interval (12) DP - Multiple Relation (12) DP - Relation Optimization (12) LeetCode - Classic (12) Level Order Traversal (12) Prime (12) Pruning (12) Reconstruct Tree (12) Thinking (12) X Sum (12) AOJ (11) Bit Mask (11) Company-Snapchat (11) DP - Space Optimization (11) Dequeue (11) Graph DFS (11) MinMax (11) Miscs (11) Princeton (11) Quick Sort (11) Stack - Tree (11) 尺取法 (11) 挑战程序设计竞赛 (11) Coin Change (10) DFS+Backtracking (10) Facebook Hacker Cup (10) Fast Slow Pointers (10) HackerRank Easy (10) Interval Tree (10) Limited Range (10) Matrix - Traverse (10) Monotone Queue (10) SPOJ (10) Starting Point (10) States (10) Stock (10) Theory (10) Tutorialhorizon (10) Kadane - Extended (9) Mathblog (9) Max-Min Flow (9) Maze (9) Median (9) O(32N) (9) Quick Select (9) Stack Overflow (9) System Design (9) Tree - Conversion (9) Use XOR (9) Book Notes (8) Company-Amazon (8) DFS+BFS (8) DP - States (8) Expression (8) Longest Common Subsequence(LCS) (8) One Pass (8) Quadtrees (8) Traversal Once (8) Trie - Suffix (8) 穷竭搜索 (8) Algorithm Problem List (7) All Sub (7) Catalan Number (7) Cycle (7) DP - Cases (7) Facebook Interview (7) Fibonacci Numbers (7) Flood fill (7) Game Nim (7) Graph BFS (7) HackerRank Difficult (7) Hackerearth (7) Inversion (7) Kadane’s Algorithm (7) Manacher (7) Morris Traversal (7) Multiple Data Structures (7) Normalized Key (7) O(XN) (7) Radix Sort (7) Recursion (7) Sampling (7) Suffix Array (7) Tech-Queries (7) Tree - Serialization (7) Tree DP (7) Trie - Bit (7) 蓝桥杯 (7) Algorithm - Brain Teaser (6) BFS - Priority Queue (6) BFS - Unusual (6) Classic Data Structure Impl (6) DP - 2D (6) DP - Monotone Queue (6) DP - Unusual (6) DP-Space Optimization (6) Dutch Flag (6) How To (6) Interviewstreet (6) Knapsack - MultiplePack (6) Local MinMax (6) MST (6) Minimum Spanning Tree (6) Number - Reach (6) Parentheses (6) Pre-Sum (6) Probability (6) Programming Pearls (6) Rabin-Karp (6) Reverse (6) Scan from right (6) Schedule (6) Stream (6) Subset Sum (6) TSP (6) Xpost (6) n00tc0d3r (6) reddit (6) AI (5) Abbreviation (5) Anagram (5) Art Of Programming-July (5) Assumption (5) Bellman Ford (5) Big Data (5) Code - Solid (5) Code Kata (5) Codility-lessons (5) Coding (5) Company - WMware (5) Convex Hull (5) Crazyforcode (5) DFS - Multiple (5) DFS+DP (5) DP - Multi-Dimension (5) DP-Multiple Relation (5) Eulerian Cycle (5) Graph - Unusual (5) Graph Cycle (5) Hash Strategy (5) Immutability (5) Java (5) LogN (5) Manhattan Distance (5) Matrix Chain Multiplication (5) N Queens (5) Pre-Sort: Index (5) Quick Partition (5) Quora (5) Randomized Algorithms (5) Resources (5) Robot (5) SPFA(Shortest Path Faster Algorithm) (5) Shuffle (5) Sieve of Eratosthenes (5) Strongly Connected Components (5) Subarray Sum (5) Sudoku (5) Suffix Tree (5) Swap (5) Threaded (5) Tree - Creation (5) Warshall Floyd (5) Word Search (5) jiuzhang (5)

Popular Posts