Package com.jgalgo.alg.tree
Interface LowestCommonAncestorStatic
- All Known Implementing Classes:
LowestCommonAncestorStaticAbstract
,LowestCommonAncestorStaticRmq
public interface LowestCommonAncestorStatic
Static Lowest Common Ancestor (LCA) algorithm.
The lowest common ancestor of two vertices in a tree is the vertex that appear in both vertices paths to the root (common ancestor), and its farthest from the root (lowest). Given a tree \(G=(V,E)\), we would like to pre process it and then answer queries of the type "what is the lower common ancestor of two vertices \(u\) and \(v\)?".
Most implementations of this interface achieve linear or near linear preprocessing time and constant or logarithmic query time.
Use newInstance()
to get a default implementation of this interface.
Graph<String, Integer> tree = Graph.newUndirected();
tree.addVertex("Grandfather Bob");
tree.addVertex("Father John");
tree.addVertex("Me");
tree.addVertex("Sister Jane");
tree.addVertex("Uncle Nick");
tree.addVertex("Cousin Alice");
tree.addEdge("Grandfather Bob", "Father John", 1957);
tree.addEdge("Father John", "Me", 1985);
tree.addEdge("Father John", "Sister Jane", 1987);
tree.addEdge("Grandfather Bob", "Uncle Nick", 1960);
tree.addEdge("Uncle Nick", "Cousin Alice", 1990);
LowestCommonAncestorStatic lca = LowestCommonAncestorStatic.newInstance();
LowestCommonAncestorStatic.DataStructure<String, Integer> lcaDS = lca.preProcessTree(tree, "Grandfather Bob");
assert lcaDS.findLowestCommonAncestor("Father John", "Uncle Nick").equals("Grandfather Bob");
assert lcaDS.findLowestCommonAncestor("Me", "Sister Jane").equals("Father John");
assert lcaDS.findLowestCommonAncestor("Uncle Nick", "Cousin Alice").equals("Uncle Nick");
assert lcaDS.findLowestCommonAncestor("Me", "Cousin Alice").equals("Grandfather Bob");
- Author:
- Barak Ugav
- See Also:
-
Nested Class Summary
Modifier and TypeInterfaceDescriptionstatic interface
Data structure result created from a static LCA pre-processing.static interface
Data structure result created from a static LCA pre-processing forIntGraph
. -
Method Summary
Modifier and TypeMethodDescriptionstatic LowestCommonAncestorStatic
Create a new algorithm for static LCA queries.<V,
E> LowestCommonAncestorStatic.DataStructure <V, E> preProcessTree
(Graph<V, E> tree, V root) Perform a static pre processing of a tree for future LCA (Lowest common ancestor) queries.
-
Method Details
-
preProcessTree
Perform a static pre processing of a tree for future LCA (Lowest common ancestor) queries.If
g
isIntGraph
, the returned object isLowestCommonAncestorStatic.IDataStructure
.- Type Parameters:
V
- the vertices typeE
- the edges type- Parameters:
tree
- a treeroot
- root of the tree- Returns:
- a data structure built from the preprocessing, that can answer LCA queries efficiently
-
newInstance
Create a new algorithm for static LCA queries.This is the recommended way to instantiate a new
LowestCommonAncestorStatic
object.- Returns:
- a default implementation of
LowestCommonAncestorStatic
-