Class DefaultManyToManyShortestPaths<V,E>
- java.lang.Object
-
- org.jgrapht.alg.shortestpath.DefaultManyToManyShortestPaths<V,E>
-
- Type Parameters:
V- the graph vertex typeE- the graph edge type
- All Implemented Interfaces:
ManyToManyShortestPathsAlgorithm<V,E>,ShortestPathAlgorithm<V,E>
public class DefaultManyToManyShortestPaths<V,E> extends Object
Naive algorithm for many-to-many shortest paths problem using.Time complexity of the algorithm is $O(|S||T|C)$, where $S$ is the set of source vertices, $T$ is the set of target vertices and $C$ is the complexity of the
ShortestPathAlgorithm.getPath(Object, Object)method of the provided implementation.For every pair of
sourceandtargetvertices computes a shortest path between them using provided implementation ofShortestPathAlgorithm. By default this implementation usesBidirectionalDijkstraShortestPath. If desired, a different implementation can be provided via thefunctionconstructor parameter.The computation complexity of the algorithm consists of two main components - the $|S||T|$ multiplier and the $C$ multiplier. This yields two bottlenecks for the algorithm. First of them is the situation when the total number calls to
ShortestPathAlgorithm.getPath(Object, Object)is large. The second situation is when the complexity of the individual call toShortestPathAlgorithm.getPath(Object, Object)takes a lot of time. Therefore the ideal use cases for this algorithm are small graphs or large graphs with low total number of source and target vertices.- Author:
- Semen Chudakov
- See Also:
DijkstraManyToManyShortestPaths,CHManyToManyShortestPaths
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.jgrapht.alg.interfaces.ManyToManyShortestPathsAlgorithm
ManyToManyShortestPathsAlgorithm.BaseManyToManyShortestPathsImpl<V,E>, ManyToManyShortestPathsAlgorithm.ManyToManyShortestPaths<V,E>
-
Nested classes/interfaces inherited from interface org.jgrapht.alg.interfaces.ShortestPathAlgorithm
ShortestPathAlgorithm.SingleSourcePaths<V,E>
-
-
Field Summary
Fields Modifier and Type Field Description protected Graph<V,E>graph
-
Constructor Summary
Constructors Constructor Description DefaultManyToManyShortestPaths(Graph<V,E> graph)Constructs a new instance of the algorithm for a givengraph.DefaultManyToManyShortestPaths(Graph<V,E> graph, Function<Graph<V,E>,ShortestPathAlgorithm<V,E>> function)Constructs a new instance of the algorithm for a givengraphandfunction.
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description ManyToManyShortestPathsAlgorithm.ManyToManyShortestPaths<V,E>getManyToManyPaths(Set<V> sources, Set<V> targets)Computes shortest paths from all vertices insourcesto all vertices intargets.GraphPath<V,E>getPath(V source, V sink)Get a shortest path from a source vertex to a sink vertex.ShortestPathAlgorithm.SingleSourcePaths<V,E>getPaths(V source)Compute all shortest paths starting from a single source vertex.doublegetPathWeight(V source, V sink)Get the weight of the shortest path from a source vertex to a sink vertex.protected static <V,E>
ShortestPathAlgorithm.SingleSourcePaths<V,E>getShortestPathsTree(Graph<V,E> graph, V source, Set<V> targets)Computes shortest paths tree starting atsourceand stopping as soon as all of thetargetsare reached.
-
-
-
Field Detail
-
graph
protected final Graph<V,E> graph
-
-
Constructor Detail
-
DefaultManyToManyShortestPaths
public DefaultManyToManyShortestPaths(Graph<V,E> graph)
Constructs a new instance of the algorithm for a givengraph. Thefunctionis defaulted to returningBidirectionalDijkstraShortestPath.- Parameters:
graph- a graph
-
DefaultManyToManyShortestPaths
public DefaultManyToManyShortestPaths(Graph<V,E> graph, Function<Graph<V,E>,ShortestPathAlgorithm<V,E>> function)
Constructs a new instance of the algorithm for a givengraphandfunction.- Parameters:
graph- a graphfunction- provides implementation ofShortestPathAlgorithm
-
-
Method Detail
-
getManyToManyPaths
public ManyToManyShortestPathsAlgorithm.ManyToManyShortestPaths<V,E> getManyToManyPaths(Set<V> sources, Set<V> targets)
Description copied from interface:ManyToManyShortestPathsAlgorithmComputes shortest paths from all vertices insourcesto all vertices intargets.- Parameters:
sources- list of sources verticestargets- list of target vertices- Returns:
- computed shortest paths
-
getPath
public GraphPath<V,E> getPath(V source, V sink)
Get a shortest path from a source vertex to a sink vertex.- Specified by:
getPathin interfaceShortestPathAlgorithm<V,E>- Parameters:
source- the source vertexsink- the target vertex- Returns:
- a shortest path or null if no path exists
-
getPathWeight
public double getPathWeight(V source, V sink)Get the weight of the shortest path from a source vertex to a sink vertex. ReturnsDouble.POSITIVE_INFINITYif no path exists.- Specified by:
getPathWeightin interfaceShortestPathAlgorithm<V,E>- Parameters:
source- the source vertexsink- the sink vertex- Returns:
- the weight of the shortest path from a source vertex to a sink vertex, or
Double.POSITIVE_INFINITYif no path exists
-
getPaths
public ShortestPathAlgorithm.SingleSourcePaths<V,E> getPaths(V source)
Compute all shortest paths starting from a single source vertex.- Specified by:
getPathsin interfaceShortestPathAlgorithm<V,E>- Parameters:
source- the source vertex- Returns:
- the shortest paths
-
getShortestPathsTree
protected static <V,E> ShortestPathAlgorithm.SingleSourcePaths<V,E> getShortestPathsTree(Graph<V,E> graph, V source, Set<V> targets)
Computes shortest paths tree starting atsourceand stopping as soon as all of thetargetsare reached. Here theDijkstraClosestFirstIteratoris used.- Type Parameters:
V- the graph vertex typeE- the graph edge type- Parameters:
graph- a graphsource- source vertextargets- target vertices- Returns:
- shortest paths starting from
sourceand reaching alltargets
-
-