V
- the graph vertex typeE
- the graph edge typepublic class RecursiveExactVCImpl<V,E> extends Object implements MinimumWeightedVertexCoverAlgorithm<V,E>, VertexCoverAlgorithm<V>
$VC(G)$:
if $V = \emptyset$ then return $\emptyset$
Choose an arbitrary node $v \in G$
$G1 := (V − v, \left{ e \in E | v \not \in e \right})$
$G2 := (V − v − N(v), \left{ e \in E | e \cap (N(v) \cup v)= \empty \right})$
if $|v \cup VC(G1)| \leq |N(v) \cup VC(G2)|$ then
return $v \cup VC(G1)$
else
return $N(v) \cup VC(G2)$
To speed up the implementation, memoization and a bounding procedure are used. The current
implementation solves instances with 150-250 vertices efficiently to optimality.
TODO JK: determine runtime complexity and add it to class description. TODO JK: run this class
through a performance profilerModifier and Type | Class and Description |
---|---|
protected class |
RecursiveExactVCImpl.BitSetCover
Helper class which represents a vertex cover as a space efficient BitSet
|
MinimumVertexCoverAlgorithm.VertexCover<V>, MinimumVertexCoverAlgorithm.VertexCoverImpl<V>
VertexCoverAlgorithm.VertexCover<V>, VertexCoverAlgorithm.VertexCoverImpl<V>
Constructor and Description |
---|
RecursiveExactVCImpl()
Deprecated.
this constructor will be removed in the next release
|
RecursiveExactVCImpl(Graph<V,E> graph)
Constructs a new GreedyVCImpl instance
|
RecursiveExactVCImpl(Graph<V,E> graph,
Map<V,Double> vertexWeightMap)
Constructs a new GreedyVCImpl instance
|
Modifier and Type | Method and Description |
---|---|
VertexCoverAlgorithm.VertexCover<V> |
getVertexCover()
Computes a vertex cover.
|
MinimumVertexCoverAlgorithm.VertexCover<V> |
getVertexCover(Graph<V,E> graph)
Computes a vertex cover; all vertices are considered to have equal weight.
|
MinimumVertexCoverAlgorithm.VertexCover<V> |
getVertexCover(Graph<V,E> graph,
Map<V,Double> vertexWeightMap)
Computes a vertex cover; the weight of each vertex is provided in the in the
vertexWeightMap . |
@Deprecated public RecursiveExactVCImpl()
public RecursiveExactVCImpl(Graph<V,E> graph)
graph
- input graphpublic VertexCoverAlgorithm.VertexCover<V> getVertexCover()
VertexCoverAlgorithm
getVertexCover
in interface VertexCoverAlgorithm<V>
public MinimumVertexCoverAlgorithm.VertexCover<V> getVertexCover(Graph<V,E> graph)
MinimumWeightedVertexCoverAlgorithm
getVertexCover
in interface MinimumVertexCoverAlgorithm<V,E>
getVertexCover
in interface MinimumWeightedVertexCoverAlgorithm<V,E>
graph
- the graphpublic MinimumVertexCoverAlgorithm.VertexCover<V> getVertexCover(Graph<V,E> graph, Map<V,Double> vertexWeightMap)
MinimumWeightedVertexCoverAlgorithm
vertexWeightMap
.getVertexCover
in interface MinimumWeightedVertexCoverAlgorithm<V,E>
graph
- the input graphvertexWeightMap
- map containing non-negative weights for each vertexCopyright © 2018. All rights reserved.