All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines
Classes | Public Types | Public Member Functions
MaxCardinalitySearch< GR, CAP, TR > Class Template Reference

Detailed Description

template<typename GR, typename CAP, typename TR>
class lemon::MaxCardinalitySearch< GR, CAP, TR >

This class provides an efficient implementation of Maximum Cardinality Search algorithm. The maximum cardinality search first chooses any node of the digraph. Then every time it chooses one unprocessed node with maximum cardinality, i.e the sum of capacities on out arcs to the nodes which were previusly processed. If there is a cut in the digraph the algorithm should choose again any unprocessed node of the digraph. The arc capacities are passed to the algorithm using a ReadMap, so it is easy to change it to any kind of capacity.

The type of the capacity is determined by the Value of the capacity map.

It is also possible to change the underlying priority heap.

Parameters:
GRThe digraph type the algorithm runs on. The value of Digraph is not used directly by the search algorithm, it is only passed to MaxCardinalitySearchDefaultTraits.
CAPThis read-only ArcMap determines the capacities of the arcs. It is read once for each arc, so the map may involve in relatively time consuming process to compute the arc capacity if it is necessary. The default map type is ConstMap<concepts::Digraph::Arc, Const<int,1> >. The value of CapacityMap is not used directly by search algorithm, it is only passed to MaxCardinalitySearchDefaultTraits.
TRTraits class to set various data types used by the algorithm. The default traits class is MaxCardinalitySearchDefaultTraits<GR, CAP>. See MaxCardinalitySearchDefaultTraits for the documentation of a MaxCardinalitySearch traits class.

#include <lemon/max_cardinality_search.h>

List of all members.

Classes

struct  SetCapacityMap
 Named parameter for setting CapacityMap type More...
struct  SetCardinalityMap
 Named parameter for setting CardinalityMap type More...
struct  SetHeap
 Named parameter for setting heap and cross reference type More...
struct  SetProcessedMap
 Named parameter for setting ProcessedMap type More...
struct  SetStandardHeap
 Named parameter for setting heap and cross reference type with automatic allocation More...

Public Types

typedef Traits::Digraph Digraph
 The type of the underlying digraph.
typedef Traits::CapacityMap::Value Value
 The type of the capacity of the arcs.
typedef Traits::CapacityMap CapacityMap
 The type of the map that stores the arc capacities.
typedef Traits::ProcessedMap ProcessedMap
 The type of the map indicating if a node is processed.
typedef Traits::CardinalityMap CardinalityMap
 The type of the map that stores the cardinalities of the nodes.
typedef Traits::HeapCrossRef HeapCrossRef
 The cross reference type used for the current heap.
typedef Traits::Heap Heap
 The heap type used by the algorithm. It maximizes the priorities.

Public Member Functions

 MaxCardinalitySearch (const Digraph &digraph, const CapacityMap &capacity)
 Constructor.
 MaxCardinalitySearch (const Digraph &digraph)
 Constructor.
 ~MaxCardinalitySearch ()
 Destructor.
MaxCardinalitySearchcapacityMap (const CapacityMap &m)
 Sets the capacity map.
const CapacityMapcapacityMap () const
 Returns a const reference to the capacity map.
MaxCardinalitySearchcardinalityMap (CardinalityMap &m)
 Sets the map storing the cardinalities calculated by the algorithm.
MaxCardinalitySearchprocessedMap (ProcessedMap &m)
 Sets the map storing the processed nodes.
const ProcessedMapprocessedMap () const
 Returns a const reference to the cardinality map.
MaxCardinalitySearchheap (Heap &hp, HeapCrossRef &cr)
 Sets the heap and the cross reference used by algorithm.
const Heapheap () const
 Returns a const reference to the heap.
const HeapCrossRefheapCrossRef () const
 Returns a const reference to the cross reference.
Execution control

The simplest way to execute the algorithm is to use one of the member functions called run().
If you need more control on the execution, first you must call init(), then you can add several source nodes with addSource(). Finally start() will perform the computation.

void init ()
 Initializes the internal data structures.
void addSource (Node source, Value capacity=0)
 Adds a new source node.
Node processNextNode ()
 Processes the next node in the priority heap.
Node nextNode ()
 Next node to be processed.
bool emptyQueue ()
 Returns false if there are nodes to be processed in the priority heap.
int emptySize ()
 Returns the number of the nodes to be processed in the priority heap.
void start ()
 Executes the algorithm.
void start (Node dest)
 Executes the algorithm until dest is reached.
template<typename NodeBoolMap >
void start (const NodeBoolMap &nm)
 Executes the algorithm until a condition is met.
void run (Node s)
 Runs the maximum cardinality search algorithm from node s.
void run ()
 Runs the maximum cardinality search algorithm for the whole digraph.
Query Functions

The results of the maximum cardinality search algorithm can be obtained using these functions.
Before the use of these functions, either run() or start() must be called.

Value cardinality (Node node) const
 The cardinality of a node.
Value currentCardinality (Node node) const
 The current cardinality of a node.
const CardinalityMapcardinalityMap () const
 Returns a reference to the NodeMap of cardinalities.
bool reached (Node v)
 Checks if a node is reachable from the root.
bool processed (Node v)
 Checks if a node is processed.

Constructor & Destructor Documentation

MaxCardinalitySearch ( const Digraph digraph,
const CapacityMap capacity 
) [inline]
Parameters:
digraphthe digraph the algorithm will run on.
capacitythe capacity map used by the algorithm.
MaxCardinalitySearch ( const Digraph digraph) [inline]
Parameters:
digraphthe digraph the algorithm will run on.

A constant 1 capacity map will be allocated.


Member Function Documentation

MaxCardinalitySearch& capacityMap ( const CapacityMap m) [inline]

Sets the capacity map.

Returns:
(*this)
const CapacityMap& capacityMap ( ) const [inline]

Returns a const reference to the capacity map used by the algorithm.

Sets the map storing the cardinalities calculated by the algorithm. If you don't use this function before calling run(), it will allocate one. The destuctor deallocates this automatically allocated map, of course.

Returns:
(*this)

Sets the map storing the processed nodes. If you don't use this function before calling run(), it will allocate one. The destuctor deallocates this automatically allocated map, of course.

Returns:
(*this)
const ProcessedMap& processedMap ( ) const [inline]

Returns a const reference to the cardinality map used by the algorithm.

MaxCardinalitySearch& heap ( Heap hp,
HeapCrossRef cr 
) [inline]

Sets the heap and the cross reference used by algorithm. If you don't use this function before calling run(), it will allocate one. The destuctor deallocates this automatically allocated map, of course.

Returns:
(*this)
const Heap& heap ( ) const [inline]

Returns a const reference to the heap used by the algorithm.

const HeapCrossRef& heapCrossRef ( ) const [inline]

Returns a const reference to the cross reference of the heap.

void init ( ) [inline]

Initializes the internal data structures, and clears the heap.

void addSource ( Node  source,
Value  capacity = 0 
) [inline]

Adds a new source node to the priority heap.

It checks if the node has not yet been added to the heap.

Node processNextNode ( ) [inline]

Processes the next node in the priority heap.

Returns:
The processed node.
Warning:
The priority heap must not be empty!
Node nextNode ( ) [inline]

Next node to be processed.

Returns:
The next node to be processed or INVALID if the priority heap is empty.
bool emptyQueue ( ) [inline]

Returns false if there are nodes to be processed in the priority heap

int emptySize ( ) [inline]

Returns the number of the nodes to be processed in the priority heap

void start ( ) [inline]

Executes the algorithm.

Precondition:
init() must be called and at least one node should be added with addSource() before using this function.

This method runs the Maximum Cardinality Search algorithm from the source node(s).

void start ( Node  dest) [inline]

Executes the algorithm until dest is reached.

Precondition:
init() must be called and at least one node should be added with addSource() before using this function.

This method runs the MaxCardinalitySearch algorithm from the source nodes.

void start ( const NodeBoolMap &  nm) [inline]

Executes the algorithm until a condition is met.

Precondition:
init() must be called and at least one node should be added with addSource() before using this function.
Parameters:
nmmust be a bool (or convertible) node map. The algorithm will stop when it reaches a node v with nm[v]==true.
void run ( Node  s) [inline]

This method runs the MaxCardinalitySearch algorithm from a root node s.

Note:
d.run(s) is just a shortcut of the following code.
         d.init();
         d.addSource(s);
         d.start();
void run ( ) [inline]

This method runs the MaxCardinalitySearch algorithm from all unprocessed node of the digraph.

Note:
d.run(s) is just a shortcut of the following code.
         d.init();
         for (NodeIt it(digraph); it != INVALID; ++it) {
           if (!d.reached(it)) {
             d.addSource(s);
             d.start();
           }
         }
Value cardinality ( Node  node) const [inline]

Returns the cardinality of a node.

Precondition:
run() must be called before using this function.
Warning:
If node v in unreachable from the root the return value of this funcion is undefined.
Value currentCardinality ( Node  node) const [inline]

Returns the current cardinality of a node.

Precondition:
the given node should be reached but not processed
const CardinalityMap& cardinalityMap ( ) const [inline]

Returns a reference to the NodeMap of cardinalities.

Precondition:
run() must be called before using this function.
bool reached ( Node  v) [inline]

Returns true if v is reachable from the root.

Warning:
The source nodes are initated as unreached.
Precondition:
run() must be called before using this function.
bool processed ( Node  v) [inline]

Returns true if v is processed, i.e. the shortest path to v has already found.

Precondition:
run() must be called before using this function.
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Defines