- Type Parameters:
V- the graph vertex typeE- the graph edge type
- All Implemented Interfaces:
LowestCommonAncestorAlgorithm<V>
Find the LCA, defined as "Let $G = (V, E)$ be a DAG, and let $x, y \in V$. Let $G_{x,y}$ be the subgraph of $G$ induced by the set of all common ancestors of $x$ and $y$. Define SLCA (x, y) to be the set of out-degree 0 nodes (leafs) in $G_{x,y}$. The lowest common ancestors of $x$ and $y$ are the elements of SLCA (x, y). " from Michael A. Bender, MartÃn Farach-Colton, Giridhar Pemmasani, Steven Skiena, Pavel Sumazin, Lowest common ancestors in trees and directed acyclic graphs, Journal of Algorithms, Volume 57, Issue 2, 2005, Pages 75-94, ISSN 0196-6774, https://doi.org/10.1016/j.jalgor.2005.08.001.
The algorithm:
- Find ancestor sets for nodes $a$ and $b$.
- Find their intersection.
- Extract leaf nodes from the intersection set.
Preprocessing Time complexity: $O(1)$
Preprocessing Space complexity: $O(1)$
Query Time complexity: $O(|V|)$
Query Space complexity: $O(|V|)$
For trees or forests please use either BinaryLiftingLCAFinder,
HeavyPathLCAFinder, EulerTourRMQLCAFinder or TarjanLCAFinder.
- Author:
- Leo Crawford, Alexandru Valeanu
-
Constructor Summary
ConstructorsConstructorDescriptionNaiveLCAFinder(Graph<V, E> graph) Create a new instance of the naive LCA finder. -
Method Summary
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.jgrapht.alg.interfaces.LowestCommonAncestorAlgorithm
getBatchLCA, getBatchLCASet
-
Constructor Details
-
NaiveLCAFinder
Create a new instance of the naive LCA finder.- Parameters:
graph- the input graph
-
-
Method Details
-
getLCA
Return the LCA of a and b- Specified by:
getLCAin interfaceLowestCommonAncestorAlgorithm<V>- Parameters:
a- the first element to find LCA forb- the other element to find the LCA for- Returns:
- the LCA of a and b, or null if there is no LCA.
-
getLCASet
Return the computed set of LCAs of a and b- Specified by:
getLCASetin interfaceLowestCommonAncestorAlgorithm<V>- Parameters:
a- the first element to find LCA forb- the other element to find the LCA for- Returns:
- the set LCAs of a and b, or empty set if there is no LCA computed.
-