Class AHUForestIsomorphismInspector<V,E>
- Type Parameters:
V- the type of the verticesE- the type of the edges
- All Implemented Interfaces:
IsomorphismInspector<V,E>
public class AHUForestIsomorphismInspector<V,E> extends java.lang.Object implements IsomorphismInspector<V,E>
The original algorithm was first presented in "Alfred V. Aho and John E. Hopcroft. 1974. The Design and Analysis of Computer Algorithms (1st ed., page 84). Addison-Wesley Longman Publishing Co., Inc., Boston, MA, USA."
This implementation runs in linear time (in the number of vertices of the input forests) while using a linear amount of memory.
For an implementation that supports rooted trees see AHURootedTreeIsomorphismInspector
and for one for unrooted trees see AHUUnrootedTreeIsomorphismInspector.
Note: This implementation requires the input graphs to have valid vertex suppliers (see
Graph.getVertexSupplier()).
Note: This inspector only returns a single mapping (chosen arbitrarily) rather than all possible mappings.
- Author:
- Alexandru Valeanu
-
Constructor Summary
-
Method Summary
Modifier and Type Method Description IsomorphicGraphMapping<V,E>getMapping()Get an isomorphism between the input forests ornullif none exists.java.util.Iterator<GraphMapping<V,E>>getMappings()Get an iterator over all calculated (isomorphic) mappings between two graphs.booleanisomorphismExists()Check if an isomorphism exists.
-
Constructor Details
-
AHUForestIsomorphismInspector
public AHUForestIsomorphismInspector(Graph<V,E> forest1, java.util.Set<V> roots1, Graph<V,E> forest2, java.util.Set<V> roots2)Construct a new AHU rooted forest isomorphism inspector. Note: The constructor does NOT check if the input forests are valid trees.- Parameters:
forest1- the first rooted forestroots1- the roots of the first forestforest2- the second rooted forestroots2- the roots of the second forest- Throws:
java.lang.NullPointerException- ifforest1orforest2isnulljava.lang.NullPointerException- ifroots1orroots2isnulljava.lang.IllegalArgumentException- ifforest1orforest2is emptyjava.lang.IllegalArgumentException- ifroots1orroots2is emptyjava.lang.IllegalArgumentException- ifroots1orroots2contain an invalid vertex
-
-
Method Details
-
getMappings
Get an iterator over all calculated (isomorphic) mappings between two graphs.- Specified by:
getMappingsin 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:
isomorphismExistsin interfaceIsomorphismInspector<V,E>- Returns:
- true if there is an isomorphism, false if there is no isomorphism
-
getMapping
Get an isomorphism between the input forests ornullif none exists.- Returns:
- isomorphic mapping,
nullis none exists
-