java.lang.Object
org.jgrapht.alg.clique.PivotBronKerboschCliqueFinder<V,E>
- Type Parameters:
V
- the graph vertex typeE
- the graph edge type
- All Implemented Interfaces:
Iterable<Set<V>>
,MaximalCliqueEnumerationAlgorithm<V,
E>
- Direct Known Subclasses:
DegeneracyBronKerboschCliqueFinder
Bron-Kerbosch maximal clique enumeration algorithm with pivot.
The pivoting follows the rule from the paper
- E. Tomita, A. Tanaka, and H. Takahashi. The worst-case time complexity for generating all maximal cliques and computational experiments. Theor. Comput. Sci. 363(1):28–42, 2006.
where the authors show that using that rule guarantees that the Bron-Kerbosch algorithm has worst-case running time $O(3^{n/3})$ where $n$ is the number of vertices of the graph, excluding time to write the output, which is worst-case optimal.
The algorithm first computes all maximal cliques and then returns the result to the user. A timeout can be set using the constructor parameters.
- Author:
- Dimitrios Michail
- See Also:
-
Field Summary
Modifier and TypeFieldDescriptionThe resultThe underlying graphprotected int
Size of biggest maximal clique found.protected final long
Timeout in nanosecondsprotected boolean
Whether the last computation terminated due to a time limit. -
Constructor Summary
ConstructorDescriptionPivotBronKerboschCliqueFinder
(Graph<V, E> graph) Constructs a new clique finder.PivotBronKerboschCliqueFinder
(Graph<V, E> graph, long timeout, TimeUnit unit) Constructs a new clique finder. -
Method Summary
Modifier and TypeMethodDescriptionprotected void
Recursive implementation of the Bron-Kerbosch with pivot.boolean
Check the computation has stopped due to a time limit or due to computing all maximal cliques.iterator()
Returns an iterator over all maximal cliques.protected void
lazyRun()
Lazily execute the enumeration algorithm.Create an iterator which returns only the maximum cliques of a graph.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
Field Details
-
graph
The underlying graph -
nanos
protected final long nanosTimeout in nanoseconds -
timeLimitReached
protected boolean timeLimitReachedWhether the last computation terminated due to a time limit. -
allMaximalCliques
The result -
maxSize
protected int maxSizeSize of biggest maximal clique found.
-
-
Constructor Details
-
PivotBronKerboschCliqueFinder
Constructs a new clique finder.- Parameters:
graph
- the input graph; must be simple
-
PivotBronKerboschCliqueFinder
Constructs a new clique finder.- Parameters:
graph
- the input graph; must be simpletimeout
- the maximum time to wait, if zero no timeoutunit
- the time unit of the timeout argument
-
-
Method Details
-
lazyRun
protected void lazyRun()Lazily execute the enumeration algorithm. -
findCliques
Recursive implementation of the Bron-Kerbosch with pivot.- Parameters:
p
- vertices to consider adding to the cliquer
- a possibly non-maximal cliquex
- vertices which must be excluded from the cliquenanosTimeLimit
- time limit
-
iterator
Description copied from interface:MaximalCliqueEnumerationAlgorithm
Returns an iterator over all maximal cliques.- Specified by:
iterator
in interfaceIterable<V>
- Specified by:
iterator
in interfaceMaximalCliqueEnumerationAlgorithm<V,
E> - Returns:
- an iterator over all maximal cliques
-
maximumIterator
Create an iterator which returns only the maximum cliques of a graph. The iterator computes all maximal cliques and then filters them by the size of the maximum found clique.- Returns:
- an iterator which returns only the maximum cliques of a graph
-
isTimeLimitReached
public boolean isTimeLimitReached()Check the computation has stopped due to a time limit or due to computing all maximal cliques.- Returns:
- true if the computation has stopped due to a time limit, false otherwise
-