Class RecursiveExactVCImpl<V,​E>

  • Type Parameters:
    V - the graph vertex type
    E - the graph edge type
    All Implemented Interfaces:
    VertexCoverAlgorithm<V>

    public class RecursiveExactVCImpl<V,​E>
    extends java.lang.Object
    implements VertexCoverAlgorithm<V>
    Finds a minimum vertex cover in a undirected graph. The implementation relies on a recursive algorithm. At each recursive step, the algorithm picks a unvisited vertex v and distinguishes two cases: either v has to be added to the vertex cover or all of its neighbors. In pseudo code, the algorithm (simplified) looks like this:
     
      $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 profiler
    Author:
    Joris Kinable
    • Constructor Detail

      • RecursiveExactVCImpl

        public RecursiveExactVCImpl​(Graph<V,​E> graph)
        Constructs a new GreedyVCImpl instance
        Parameters:
        graph - input graph
      • RecursiveExactVCImpl

        public RecursiveExactVCImpl​(Graph<V,​E> graph,
                                    java.util.Map<V,​java.lang.Double> vertexWeightMap)
        Constructs a new GreedyVCImpl instance
        Parameters:
        graph - input graph
        vertexWeightMap - mapping of vertex weights