Interface SteinerTreeAlgo
- All Known Implementing Classes:
SteinerTreeAlgoAbstract
,SteinerTreeMehlhorn
The Steiner tree problem is a generalization of the minimum spanning tree problem. Given a graph \(G=(V,E)\) and a set of terminals vertices \(T \subseteq V\), the Steiner tree problem is to find a minimum weight tree that spans all the terminals. The tree may contain additional vertices that are not terminals, which are usually called Steiner vertices. The Steiner tree problem is NP-hard, therefore algorithms implementing this interface are heuristics, and do not guarantee to find the optimal solution, only a solution with bounded approximation factor.
Use newInstance()
to get a default implementation of this interface.
- Author:
- Barak Ugav
- See Also:
-
Nested Class Summary
Modifier and TypeInterfaceDescriptionstatic interface
A result object forSteinerTreeAlgo
computation forIntGraph
.static interface
A result object forSteinerTreeAlgo
computation. -
Method Summary
Modifier and TypeMethodDescription<V,
E> SteinerTreeAlgo.Result <V, E> computeSteinerTree
(Graph<V, E> g, WeightFunction<E> w, Collection<V> terminals) Compute the minimum Steiner tree of a given graph.static <V,
E> boolean isSteinerTree
(Graph<V, E> g, Collection<V> terminals, Collection<E> edges) Check whether a given set of edges is a valid Steiner tree for a given graph and terminals.static SteinerTreeAlgo
Create a new Steiner tree algorithm object.
-
Method Details
-
computeSteinerTree
<V,E> SteinerTreeAlgo.Result<V,E> computeSteinerTree(Graph<V, E> g, WeightFunction<E> w, Collection<V> terminals) Compute the minimum Steiner tree of a given graph.The algorithm with search for the minimum Steiner tree that spans all the terminals with respect to the given edge weight function. The tree may contain additional vertices that are not terminals.
If
g
is anIntGraph
, aSteinerTreeAlgo.IResult
object will be returned. In that case, its better to pass aIWeightFunction
asw
, andIntCollection
asterminals
to avoid boxing/unboxing.- Type Parameters:
V
- the vertices typeE
- the edges type- Parameters:
g
- a graphw
- an edge weight functionterminals
- a set of terminals vertices- Returns:
- a result object containing all the edges of the computed tree
-
isSteinerTree
Check whether a given set of edges is a valid Steiner tree for a given graph and terminals.A set of edges is a valid Steiner tree if it spans all the terminals, does not contain any cycles, form a single connected components, and there are no non-terminal leaves in the tree.
If
g
is anIntGraph
, its better to pass aIntCollection
asterminals
andedges
to avoid boxing/unboxing.- Type Parameters:
V
- the vertices typeE
- the edges type- Parameters:
g
- a graphterminals
- a set of terminals verticesedges
- a set of edges- Returns:
true
if the given set of edges is a valid Steiner tree
-
newInstance
Create a new Steiner tree algorithm object.This is the recommended way to instantiate a new
SteinerTreeAlgo
object.- Returns:
- a default implementation of
SteinerTreeAlgo
-