The.Algorithm.Design.Manual.Springer-Verlag.1998
The.Algorithm.Design.Manual.Springer-Verlag.1998 The.Algorithm.Design.Manual.Springer-Verlag.1998
Shortest Path complete. The all-pairs shortest path matrix can be used to compute several useful invariants of any graph G, that are related to the center of G. The eccentricity of a vertex v in a graph is the shortest-path distance to the farthest vertex from v. From the eccentricity come other graph invariants. The radius of a graph is the smallest eccentricity of any vertex, while the center is the set of vertices whose eccentricity is the radius. The diameter of a graph is the maximum eccentricity of any vertex. Implementations: The highest performance code (for both Dijkstra and Bellman-Ford) available for finding shortest paths in graphs is SPLIB [CGR93], developed in C language by Cherkassky, Goldberg, and Radzik. They report solving instances with over one million vertices in under two minutes on a Sun Sparc-10 workstation. Their codes are available from http://www.neci.nj.nec.com/homepages/avg.html for noncommercial use. LEDA (see Section ) provides good implementations in C++ for all of the shortest-path algorithms we have discussed, including Dijkstra, Bellman-Ford, and Floyd's algorithms. Pascal implementations of Dijkstra, Bellman-Ford, and Floyd's algorithms are given in [SDK83]. See Section . XTango (see Section ) includes animations of both Dijkstra's and Floyd's shortest-path algorithms. Combinatorica [Ski90] provides Mathematica implementations of Dijkstra's and Floyd's algorithms for shortest paths, acyclicity testing, and girth computation for directed/undirected and weighted/unweighted graphs. See Section . The Stanford GraphBase (see Section ) contains an implementation of Dijkstra's algorithm, used for computing word ladders in a graph defined by five-letter words, as well as an implementation of a program to bound the girth of graphs. Algorithm 562 [Pap80] of the Collected Algorithms of the ACM is a Fortran program to find shortest paths in graphs (see Section ). Notes: Good expositions on Dijkstra's algorithm [Dij59] and Floyd's all-pairs-shortest-path algorithm [Flo62] include [Baa88, CLR90, Man89]. Good expositions of the Bellman-Ford algorithm [Bel58, FF62] are slightly rarer, but include [CLR90, Eve79a, Law76]. Expositions on finding the shortest path in a DAG include [Law76]. A survey on shortest-path algorithms with 222 references appears in [DP84]. Included are citations to algorithms for related path problems, like finding the kth-shortest path and shortest paths when edge costs vary with time. Expositions on finding the kth-shortest path include [Law76]. The theoretically fastest algorithms known for single-source shortest path for positive edge weight graphs are variations of Dijkstra's algorithm with Fibonacci heaps [FT87]. Experimental studies of shortest-path algorithms include [DF79, DGKK79]. However, these experiments were done before Fibonacci heaps were developed. See [CGR93] for a more recent study. Theoretically faster algorithms exist when the weights of the edges are small; i.e. their absolute values are each bounded by W. For positive edge weights, the single-source-shortest-path can be found in [AMOT88], while suffices for graphs with negative edge weights [GT89] file:///E|/BOOK/BOOK4/NODE162.HTM (4 of 5) [19/1/2003 1:31:00]
Shortest Path Related Problems: Network flow (see page ), motion planning (see page ). Next: Transitive Closure and Reduction Up: Graph Problems: Polynomial-Time Previous: Minimum Spanning Tree Algorithms Mon Jun 2 23:33:50 EDT 1997 file:///E|/BOOK/BOOK4/NODE162.HTM (5 of 5) [19/1/2003 1:31:00]
- Page 429 and 430: Searching large performance improve
- Page 431 and 432: Searching Notes: Mehlhorn and Tsaka
- Page 433 and 434: Median and Selection followed by fi
- Page 435 and 436: Generating Permutations Next: Gener
- Page 437 and 438: Generating Permutations The rank/un
- Page 439 and 440: Generating Permutations generating
- Page 441 and 442: Generating Subsets look right when
- Page 443 and 444: Generating Subsets above for detail
- Page 445 and 446: Generating Partitions Although the
- Page 447 and 448: Generating Partitions Two related c
- Page 449 and 450: Generating Graphs generate: ● Do
- Page 451 and 452: Generating Graphs Combinatorica [Sk
- Page 453 and 454: Calendrical Calculations Next: Job
- Page 455 and 456: Calendrical Calculations Gregorian,
- Page 457 and 458: Job Scheduling ● To assign a set
- Page 459 and 460: Job Scheduling shop scheduling incl
- Page 461 and 462: Satisfiability logic, and automatic
- Page 463 and 464: Satisfiability Next: Graph Problems
- Page 465 and 466: Graph Problems: Polynomial-Time rec
- Page 467 and 468: Connected Components Testing the co
- Page 469 and 470: Connected Components discussing gra
- Page 471 and 472: Topological Sorting contradiction t
- Page 473 and 474: Minimum Spanning Tree Next: Shortes
- Page 475 and 476: Minimum Spanning Tree help you sort
- Page 477 and 478: Shortest Path Next: Transitive Clos
- Page 479: Shortest Path easier to program tha
- Page 483 and 484: Transitive Closure and Reduction
- Page 485 and 486: Transitive Closure and Reduction Al
- Page 487 and 488: Matching augmenting paths and stopp
- Page 489 and 490: Matching Combinatorica [Ski90] prov
- Page 491 and 492: Eulerian Cycle / Chinese Postman ar
- Page 493 and 494: Eulerian Cycle / Chinese Postman Ne
- Page 495 and 496: Edge and Vertex Connectivity Severa
- Page 497 and 498: Edge and Vertex Connectivity Next:
- Page 499 and 500: Network Flow programming model for
- Page 501 and 502: Network Flow Combinatorica [Ski90]
- Page 503 and 504: Drawing Graphs Nicely vertices are
- Page 505 and 506: Drawing Graphs Nicely labs.com/orgs
- Page 507 and 508: Drawing Trees such as the map of th
- Page 509 and 510: Planarity Detection and Embedding N
- Page 511 and 512: Planarity Detection and Embedding p
- Page 513 and 514: Graph Problems: Hard Problems ● C
- Page 515 and 516: Clique approximate even to within a
- Page 517 and 518: Independent Set Next: Vertex Cover
- Page 519 and 520: Independent Set Related Problems: C
- Page 521 and 522: Vertex Cover Vertex cover and indep
- Page 523 and 524: Traveling Salesman Problem Next: Ha
- Page 525 and 526: Traveling Salesman Problem practice
- Page 527 and 528: Traveling Salesman Problem Size is
- Page 529 and 530: Hamiltonian Cycle Eulerian cycle, p
Shortest Path<br />
complete.<br />
<strong>The</strong> all-pairs shortest path matrix can be used to compute several useful invariants of any graph G, that are related to the<br />
center of G. <strong>The</strong> eccentricity of a vertex v in a graph is the shortest-path distance to the farthest vertex from v. From the<br />
eccentricity come other graph invariants. <strong>The</strong> radius of a graph is the smallest eccentricity of any vertex, while the center<br />
is the set of vertices whose eccentricity is the radius. <strong>The</strong> diameter of a graph is the maximum eccentricity of any vertex.<br />
Implementations: <strong>The</strong> highest performance code (for both Dijkstra and Bellman-Ford) available for finding shortest<br />
paths in graphs is SPLIB [CGR93], developed in C language by Cherkassky, Goldberg, and Radzik. <strong>The</strong>y report solving<br />
instances with over one million vertices in under two minutes on a Sun Sparc-10 workstation. <strong>The</strong>ir codes are available<br />
from http://www.neci.nj.nec.com/homepages/avg.html for noncommercial use.<br />
LEDA (see Section ) provides good implementations in C++ for all of the shortest-path algorithms we have<br />
discussed, including Dijkstra, Bellman-Ford, and Floyd's algorithms.<br />
Pascal implementations of Dijkstra, Bellman-Ford, and Floyd's algorithms are given in [SDK83]. See Section .<br />
XTango (see Section ) includes animations of both Dijkstra's and Floyd's shortest-path algorithms.<br />
Combinatorica [Ski90] provides Mathematica implementations of Dijkstra's and Floyd's algorithms for shortest paths,<br />
acyclicity testing, and girth computation for directed/undirected and weighted/unweighted graphs. See Section .<br />
<strong>The</strong> Stanford GraphBase (see Section ) contains an implementation of Dijkstra's algorithm, used for computing<br />
word ladders in a graph defined by five-letter words, as well as an implementation of a program to bound the girth of<br />
graphs. <strong>Algorithm</strong> 562 [Pap80] of the Collected <strong>Algorithm</strong>s of the ACM is a Fortran program to find shortest paths in<br />
graphs (see Section ).<br />
Notes: Good expositions on Dijkstra's algorithm [Dij59] and Floyd's all-pairs-shortest-path algorithm [Flo62] include<br />
[Baa88, CLR90, Man89]. Good expositions of the Bellman-Ford algorithm [Bel58, FF62] are slightly rarer, but include<br />
[CLR90, Eve79a, Law76]. Expositions on finding the shortest path in a DAG include [Law76].<br />
A survey on shortest-path algorithms with 222 references appears in [DP84]. Included are citations to algorithms for<br />
related path problems, like finding the kth-shortest path and shortest paths when edge costs vary with time. Expositions<br />
on finding the kth-shortest path include [Law76].<br />
<strong>The</strong> theoretically fastest algorithms known for single-source shortest path for positive edge weight graphs are variations<br />
of Dijkstra's algorithm with Fibonacci heaps [FT87]. Experimental studies of shortest-path algorithms include [DF79,<br />
DGKK79]. However, these experiments were done before Fibonacci heaps were developed. See [CGR93] for a more<br />
recent study.<br />
<strong>The</strong>oretically faster algorithms exist when the weights of the edges are small; i.e. their absolute values are each bounded<br />
by W. For positive edge weights, the single-source-shortest-path can be found in [AMOT88], while<br />
suffices for graphs with negative edge weights [GT89]<br />
file:///E|/BOOK/BOOK4/NODE162.HTM (4 of 5) [19/1/2003 1:31:00]