![]()  | 
  
    CMR
    1.3.0
    
   | 
 
#include <cmr/tu.h>#include "matrix_internal.h"#include "block_decomposition.h"#include "camion_internal.h"#include "hereditary_property.h"#include "seymour_internal.h"#include <stdlib.h>#include <assert.h>#include <time.h>Classes | |
| struct | CMR_TU_ENUMERATION | 
| Data for enumeration.  More... | |
Functions | |
| CMR_ERROR | CMRtuParamsInit (CMR_TU_PARAMS *params) | 
| Initializes the default parameters for recognition of totally unimodular matrices.   | |
| CMR_ERROR | CMRtuStatsInit (CMR_TU_STATS *stats) | 
| Initializes all statistics for recognition algorithm for totally unimodular matrices.   | |
| CMR_ERROR | CMRtuStatsPrint (FILE *stream, CMR_TU_STATS *stats, const char *prefix) | 
| Prints statistics for recognition algorithm for totally unimodular matrices.   | |
| static CMR_ERROR | tuDecomposition (CMR *cmr, CMR_CHRMAT *matrix, void *data, bool *pisTotallyUnimodular, CMR_SUBMAT **psubmatrix, double timeLimit) | 
| static CMR_ERROR | tuEulerianColumns (CMR_TU_ENUMERATION *enumeration, size_t numColumns) | 
| Recursive enumeration of column subsets and subsequent testing of Eulerian submatrix.   | |
| static bool | tuEulerianRows (CMR_TU_ENUMERATION *enumeration, size_t numRows) | 
| Recursive enumeration of row subsets and subsequent testing of total unimodularity.   | |
| static CMR_ERROR | tuEulerian (CMR *cmr, CMR_CHRMAT *matrix, bool isTransposed, bool *pisTotallyUnimodular, CMR_SUBMAT **psubmatrix, CMR_TU_STATS *stats, double timeLimit) | 
| Submatrix test.   | |
| static bool | tuPartitionSearch (CMR *cmr, CMR_CHRMAT *matrix, int8_t *selection, size_t current, int *columnSum) | 
| Recursively assigns +1 or -1 to each row that is part of the subset to test Ghouila-Houri.   | |
| static int | tuPartitionSubset (CMR *cmr, CMR_CHRMAT *matrix, bool transposed, int8_t *selection, size_t current, int *columnSum, CMR_TU_STATS *stats, clock_t startClock, double timeLimit) | 
| Recursively selects a row subset and tests Ghouila-Houri for each.   | |
| static CMR_ERROR | tuPartition (CMR *cmr, CMR_CHRMAT *matrix, bool transposed, bool *pisTotallyUnimodular, CMR_TU_STATS *stats, double timeLimit) | 
| Partition test based on Ghouila-Houri.   | |
| CMR_ERROR | CMRtuTest (CMR *cmr, CMR_CHRMAT *matrix, bool *pisTotallyUnimodular, CMR_SEYMOUR_NODE **proot, CMR_SUBMAT **psubmatrix, CMR_TU_PARAMS *params, CMR_TU_STATS *stats, double timeLimit) | 
| Tests a matrix \( M \) for being totally unimodular.   | |
| CMR_ERROR | CMRtuCompleteDecomposition (CMR *cmr, CMR_SEYMOUR_NODE *dec, CMR_TU_PARAMS *params, CMR_TU_STATS *stats, double timeLimit) | 
| Completes a subtree of an existing decomposition tree.   | |
| CMR_ERROR CMRtuCompleteDecomposition | ( | CMR * | cmr, | 
| CMR_SEYMOUR_NODE * | dec, | ||
| CMR_TU_PARAMS * | params, | ||
| CMR_TU_STATS * | stats, | ||
| double | timeLimit | ||
| ) | 
Completes a subtree of an existing decomposition tree.
Replace the node's subtree by a new one even if it exists. Note that different parameters may yield a different subtree.
params.algorithm to be CMR_TU_ALGORITHM_DECOMPOSITION. | cmr | CMR environment. | 
| dec | Pointer to the decomposition node that is the root of the new subtree. | 
| params | Parameters for the computation. | 
| stats | Statistics for the computation (may be NULL).   | 
| timeLimit | Time limit to impose. | 
| CMR_ERROR CMRtuParamsInit | ( | CMR_TU_PARAMS * | params | ) | 
Initializes the default parameters for recognition of totally unimodular matrices.
These are selected for minimum running time.
| params | Pointer to parameters. | 
| CMR_ERROR CMRtuStatsInit | ( | CMR_TU_STATS * | stats | ) | 
Initializes all statistics for recognition algorithm for totally unimodular matrices.
| stats | Pointer to statistics. | 
| CMR_ERROR CMRtuStatsPrint | ( | FILE * | stream, | 
| CMR_TU_STATS * | stats, | ||
| const char * | prefix | ||
| ) | 
Prints statistics for recognition algorithm for totally unimodular matrices.
| stream | File stream to print to. | 
| stats | Pointer to statistics. | 
| prefix | Prefix string to prepend to each printed line (may be NULL).  | 
| CMR_ERROR CMRtuTest | ( | CMR * | cmr, | 
| CMR_CHRMAT * | matrix, | ||
| bool * | pisTotallyUnimodular, | ||
| CMR_SEYMOUR_NODE ** | proot, | ||
| CMR_SUBMAT ** | psubmatrix, | ||
| CMR_TU_PARAMS * | params, | ||
| CMR_TU_STATS * | stats, | ||
| double | timeLimit | ||
| ) | 
Tests a matrix \( M \) for being totally unimodular.
Tests if matrix \( M \) is totally unimodular and sets *pisTotallyUnimodular accordingly.
If \( M \) is totally unimodular and pdec != NULL, then *pdec will contain a decomposition tree of the regular matroid. The caller must release it via CMRdecFree().
If \( M \) is not totally unimodular and psubmatrix != NULL, then *psubmatrix will indicate a submatrix of \( M \) with determinant \( -2 \) or \( 2 \). 
| cmr | CMR environment | 
| matrix | Matrix \( M \). | 
| pisTotallyUnimodular | Pointer for storing whether \( M \) is totally unimodular. | 
| proot | Pointer for storing the decomposition tree (may be NULL).   | 
| psubmatrix | Pointer for storing a submatrix with non-ternary determinant (may be NULL).   | 
| params | Parameters for the computation (may be NULL for defaults).   | 
| stats | Statistics for the computation (may be NULL).   | 
| timeLimit | Time limit to impose. | 
      
  | 
  static | 
| cmr | CMR environment. | 
| matrix | Some matrix to be tested for total unimodularity. | 
| data | Additional data (must be NULL).   | 
| pisTotallyUnimodular | Pointer for storing whether matrix is totally unimodular.   | 
| psubmatrix | Pointer for storing a proper non-totally unimodular submatrix of matrix.   | 
| timeLimit | Time limit to impose. | 
      
  | 
  static | 
Submatrix test.
| cmr | CMR environment | 
| matrix | Matrix \( M \). | 
| isTransposed | Whether we're dealing with the transpose. | 
| pisTotallyUnimodular | Pointer for storing whether \( M \) is totally unimodular. | 
| psubmatrix | Pointer for storing the submatrix. | 
| stats | Statistics. | 
| timeLimit | Time limit to impose. | 
      
  | 
  static | 
Recursive enumeration of column subsets and subsequent testing of Eulerian submatrix.
| enumeration | Enumeration information. | 
| numColumns | Number of already selected columns. | 
      
  | 
  static | 
Recursive enumeration of row subsets and subsequent testing of total unimodularity.
true if we can stop (due to time limit or a found violating submatrix). | enumeration | Enumeration information. | 
| numRows | Number of already selected rows. | 
      
  | 
  static | 
Partition test based on Ghouila-Houri.
| cmr | CMR environment | 
| matrix | Matrix \( M \). | 
| transposed | Whether we're dealing with the transposed . | 
| pisTotallyUnimodular | Pointer for storing whether \( M \) is totally unimodular. | 
| stats | Statistics. | 
| timeLimit | Time limit to impose. | 
      
  | 
  static | 
Recursively assigns +1 or -1 to each row that is part of the subset to test Ghouila-Houri.
| cmr | CMR environment | 
| matrix | Matrix \( M \). | 
| selection | Array with selection. | 
| current | Index to decide for selection. | 
| columnSum | Array for computing column sums. | 
      
  | 
  static | 
Recursively selects a row subset and tests Ghouila-Houri for each.
| cmr | CMR environment | 
| matrix | Matrix \( M \). | 
| transposed | Whether we're dealing with the transpose. | 
| selection | Array with selection. | 
| current | Index to decide for selection. | 
| columnSum | Array for computing column sums. | 
| stats | Statistics. | 
| startClock | Clock for start for computation. | 
| timeLimit | Time limit for computation. |