Class AHURootedTreeIsomorphismInspector<V,E>
- java.lang.Object
-
- org.jgrapht.alg.isomorphism.AHURootedTreeIsomorphismInspector<V,E>
-
- Type Parameters:
V
- the type of the verticesE
- the type of the edges
- All Implemented Interfaces:
IsomorphismInspector<V,E>
public class AHURootedTreeIsomorphismInspector<V,E> extends java.lang.Object implements IsomorphismInspector<V,E>
This is an implementation of the AHU algorithm for detecting an (unweighted) isomorphism between two rooted trees. Please see mathworld.wolfram.com for a complete definition of the isomorphism problem for general graphs.The original algorithm was first presented in "Alfred V. Aho and John E. Hopcroft. 1974. The Design and Analysis of Computer Algorithms (1st ed.). Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA."
This implementation runs in linear time (in the number of vertices of the input trees) while using a linear amount of memory.
Note: If the input graph is directed, it effectively considers only the subtree reachable from the specified root.
For an implementation that supports unrooted trees see
AHUUnrootedTreeIsomorphismInspector
.
For an implementation that supports rooted forests seeAHUForestIsomorphismInspector
.Note: This inspector only returns a single mapping (chosen arbitrarily) rather than all possible mappings.
- Author:
- Alexandru Valeanu
-
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description IsomorphicGraphMapping<V,E>
getMapping()
Get an isomorphism between the input trees ornull
if none exists.java.util.Iterator<GraphMapping<V,E>>
getMappings()
Get an iterator over all calculated (isomorphic) mappings between two graphs.boolean
isomorphismExists()
Check if an isomorphism exists.
-
-
-
Constructor Detail
-
AHURootedTreeIsomorphismInspector
public AHURootedTreeIsomorphismInspector(Graph<V,E> tree1, V root1, Graph<V,E> tree2, V root2)
Construct a new AHU rooted tree isomorphism inspector. Note: The constructor does NOT check if the input trees are valid.- Parameters:
tree1
- the first rooted treeroot1
- the root of the first treetree2
- the second rooted treeroot2
- the root of the second tree- Throws:
java.lang.NullPointerException
- iftree1
ortree2
isnull
java.lang.NullPointerException
- ifroot1
orroot2
isnull
java.lang.IllegalArgumentException
- iftree1
ortree2
is emptyjava.lang.IllegalArgumentException
- ifroot1
orroot2
is an invalid vertex
-
-
Method Detail
-
getMappings
public java.util.Iterator<GraphMapping<V,E>> getMappings()
Get an iterator over all calculated (isomorphic) mappings between two graphs.- Specified by:
getMappings
in interfaceIsomorphismInspector<V,E>
- Returns:
- an iterator over all calculated (isomorphic) mappings between two graphs
-
isomorphismExists
public boolean isomorphismExists()
Check if an isomorphism exists.- Specified by:
isomorphismExists
in interfaceIsomorphismInspector<V,E>
- Returns:
- true if there is an isomorphism, false if there is no isomorphism
-
getMapping
public IsomorphicGraphMapping<V,E> getMapping()
Get an isomorphism between the input trees ornull
if none exists.- Returns:
- isomorphic mapping,
null
is none exists
-
-