... | ... |
@@ -36,25 +36,27 @@ |
36 | 36 |
#include <lemon/bellman_ford.h> |
37 | 37 |
#include <lemon/howard.h> |
38 | 38 |
|
39 | 39 |
namespace lemon { |
40 | 40 |
|
41 | 41 |
/// \addtogroup min_cost_flow_algs |
42 | 42 |
/// @{ |
43 | 43 |
|
44 | 44 |
/// \brief Implementation of cycle-canceling algorithms for |
45 | 45 |
/// finding a \ref min_cost_flow "minimum cost flow". |
46 | 46 |
/// |
47 | 47 |
/// \ref CycleCanceling implements three different cycle-canceling |
48 |
/// algorithms for finding a \ref min_cost_flow "minimum cost flow" |
|
48 |
/// algorithms for finding a \ref min_cost_flow "minimum cost flow" |
|
49 |
/// \ref amo93networkflows, \ref klein67primal, |
|
50 |
/// \ref goldberg89cyclecanceling. |
|
49 | 51 |
/// The most efficent one (both theoretically and practically) |
50 | 52 |
/// is the \ref CANCEL_AND_TIGHTEN "Cancel and Tighten" algorithm, |
51 | 53 |
/// thus it is the default method. |
52 | 54 |
/// It is strongly polynomial, but in practice, it is typically much |
53 | 55 |
/// slower than the scaling algorithms and NetworkSimplex. |
54 | 56 |
/// |
55 | 57 |
/// Most of the parameters of the problem (except for the digraph) |
56 | 58 |
/// can be given using separate functions, and the algorithm can be |
57 | 59 |
/// executed using the \ref run() function. If some parameters are not |
58 | 60 |
/// specified, then default values will be used. |
59 | 61 |
/// |
60 | 62 |
/// \tparam GR The digraph type the algorithm runs on. |
... | ... |
@@ -115,30 +117,32 @@ |
115 | 117 |
/// \ref CycleCanceling provides three different cycle-canceling |
116 | 118 |
/// methods. By default, \ref CANCEL_AND_TIGHTEN "Cancel and Tighten" |
117 | 119 |
/// is used, which proved to be the most efficient and the most robust |
118 | 120 |
/// on various test inputs. |
119 | 121 |
/// However, the other methods can be selected using the \ref run() |
120 | 122 |
/// function with the proper parameter. |
121 | 123 |
enum Method { |
122 | 124 |
/// A simple cycle-canceling method, which uses the |
123 | 125 |
/// \ref BellmanFord "Bellman-Ford" algorithm with limited iteration |
124 | 126 |
/// number for detecting negative cycles in the residual network. |
125 | 127 |
SIMPLE_CYCLE_CANCELING, |
126 | 128 |
/// The "Minimum Mean Cycle-Canceling" algorithm, which is a |
127 |
/// well-known strongly polynomial method |
|
129 |
/// well-known strongly polynomial method |
|
130 |
/// \ref goldberg89cyclecanceling. It improves along a |
|
128 | 131 |
/// \ref min_mean_cycle "minimum mean cycle" in each iteration. |
129 | 132 |
/// Its running time complexity is O(n<sup>2</sup>m<sup>3</sup>log(n)). |
130 | 133 |
MINIMUM_MEAN_CYCLE_CANCELING, |
131 | 134 |
/// The "Cancel And Tighten" algorithm, which can be viewed as an |
132 |
/// improved version of the previous method |
|
135 |
/// improved version of the previous method |
|
136 |
/// \ref goldberg89cyclecanceling. |
|
133 | 137 |
/// It is faster both in theory and in practice, its running time |
134 | 138 |
/// complexity is O(n<sup>2</sup>m<sup>2</sup>log(n)). |
135 | 139 |
CANCEL_AND_TIGHTEN |
136 | 140 |
}; |
137 | 141 |
|
138 | 142 |
private: |
139 | 143 |
|
140 | 144 |
TEMPLATE_DIGRAPH_TYPEDEFS(GR); |
141 | 145 |
|
142 | 146 |
typedef std::vector<int> IntVector; |
143 | 147 |
typedef std::vector<char> CharVector; |
144 | 148 |
typedef std::vector<double> DoubleVector; |
0 comments (0 inline)