![]() |
CMR
1.3.0
|
#include <cmr/balanced.h>
#include <cmr/camion.h>
#include <cmr/series_parallel.h>
#include "env_internal.h"
#include "block_decomposition.h"
#include "sort.h"
#include "matrix_internal.h"
#include "camion_internal.h"
#include <stdlib.h>
#include <stdint.h>
#include <assert.h>
#include <time.h>
Classes | |
struct | CMR_BALANCED_ENUMERATION |
Data for enumeration. More... | |
Functions | |
CMR_ERROR | CMRbalancedParamsInit (CMR_BALANCED_PARAMS *params) |
Initializes the default parameters for recognition of balanced matrices. | |
CMR_ERROR | CMRbalancedStatsInit (CMR_BALANCED_STATS *stats) |
Initializes all statistics for recognition algorithm for balanced matrices. | |
CMR_ERROR | CMRbalancedStatsPrint (FILE *stream, CMR_BALANCED_STATS *stats, const char *prefix) |
Prints statistics for recognition algorithm for balanced matrices. | |
static CMR_ERROR | balancedTestEnumerateColumns (CMR_BALANCED_ENUMERATION *enumeration, size_t numColumns) |
Recursive enumeration of column subsets and subsequent testing of balancedness. | |
static bool | balancedTestEnumerateRows (CMR_BALANCED_ENUMERATION *enumeration, size_t numRows) |
Recursive enumeration of row subsets and subsequent testing of balancedness. | |
static CMR_ERROR | balancedTestEnumerate (CMR *cmr, CMR_CHRMAT *matrix, bool *pisBalanced, CMR_SUBMAT **psubmatrix, CMR_BALANCED_STATS *stats, double timeLimit, bool isTransposed) |
Tests a connected series-parallel reduced matrix \( M \) for being balanced using the enumeration algorithm. | |
static CMR_ERROR | balancedTestGraph (CMR *cmr, CMR_CHRMAT *matrix, bool *pisBalanced, CMR_SUBMAT **psubmatrix, CMR_BALANCED_PARAMS *params, CMR_BALANCED_STATS *stats, double timeLimit) |
Tests a connected series-parallel reduced matrix \( M \) for being balanced using the graph-based algorithm. | |
static CMR_ERROR | balancedTestChooseAlgorithm (CMR *cmr, CMR_CHRMAT *matrix, bool *pisBalanced, CMR_SUBMAT **psubmatrix, CMR_BALANCED_PARAMS *params, CMR_BALANCED_STATS *stats, double timeLimit) |
Tests a connected (potentially SP-reduced) matrix \( M \) for being balanced. | |
static CMR_ERROR | balancedTestConnected (CMR *cmr, CMR_CHRMAT *matrix, bool *pisBalanced, CMR_SUBMAT **psubmatrix, CMR_BALANCED_PARAMS *params, CMR_BALANCED_STATS *stats, double timeLimit) |
Tests a connected matrix \( M \) for being balanced. | |
int | compareBlockComponents (const void *a, const void *b) |
Compares two matrix blocks according to minimum of number of rows and number of columns. | |
CMR_ERROR | CMRbalancedTest (CMR *cmr, CMR_CHRMAT *matrix, bool *pisBalanced, CMR_SUBMAT **psubmatrix, CMR_BALANCED_PARAMS *params, CMR_BALANCED_STATS *stats, double timeLimit) |
Tests a matrix \( M \) for being balanced. | |
|
static |
Tests a connected (potentially SP-reduced) matrix \( M \) for being balanced.
Calls the algorithm requested by params
.
If \( M \) is not balanced and psubmatrix
!= NULL
, then *psubmatrix
will indicate a submatrix of \( M \) with exactly two nonzeros in each row and in each column and with determinant \( -2 \) or \( 2 \).
cmr | CMR environment |
matrix | Matrix \( M \). |
pisBalanced | Pointer for storing whether \( M \) is balanced. |
psubmatrix | Pointer for storing a minimal nonbalanced submatrix (may be NULL ). |
params | Parameters for the computation. |
stats | Statistics for the computation (may be NULL ). |
timeLimit | Time limit to impose. |
|
static |
Tests a connected matrix \( M \) for being balanced.
Tries to apply series-parallel reductions and then calls balancedTestChooseAlgorithm.
If \( M \) is not balanced and psubmatrix
!= NULL
, then *psubmatrix
will indicate a submatrix of \( M \) with exactly two nonzeros in each row and in each column and with determinant \( -2 \) or \( 2 \).
cmr | CMR environment |
matrix | Matrix \( M \). |
pisBalanced | Pointer for storing whether \( M \) is balanced. |
psubmatrix | Pointer for storing a minimal nonbalanced submatrix (may be NULL ). |
params | Parameters for the computation. |
stats | Statistics for the computation (may be NULL ). |
timeLimit | Time limit to impose. |
|
static |
Tests a connected series-parallel reduced matrix \( M \) for being balanced using the enumeration algorithm.
If \( M \) is not balanced and psubmatrix
!= NULL
, then *psubmatrix
will indicate a submatrix of \( M \) with exactly two nonzeros in each row and in each column and with determinant \( -2 \) or \( 2 \).
cmr | CMR environment |
matrix | Matrix \( M \). |
pisBalanced | Pointer for storing whether \( M \) is balanced. |
psubmatrix | Pointer for storing a minimal nonbalanced submatrix (may be NULL ). |
stats | Statistics for the computation (may be NULL ). |
timeLimit | Time limit to impose. |
isTransposed | Whether we're dealing with the transposed matrix. |
|
static |
Recursive enumeration of column subsets and subsequent testing of balancedness.
enumeration | Enumeration information. |
numColumns | Number of already selected columns. |
|
static |
Recursive enumeration of row subsets and subsequent testing of balancedness.
true
if we can stop (due to time limit or a found violating submatrix). enumeration | Enumeration information. |
numRows | Number of already selected rows. |
|
static |
Tests a connected series-parallel reduced matrix \( M \) for being balanced using the graph-based algorithm.
If \( M \) is not balanced and psubmatrix
!= NULL
, then *psubmatrix
will indicate a submatrix of \( M \) with exactly two nonzeros in each row and in each column and with determinant \( -2 \) or \( 2 \).
cmr | CMR environment |
matrix | Matrix \( M \). |
pisBalanced | Pointer for storing whether \( M \) is balanced. |
psubmatrix | Pointer for storing a minimal nonbalanced submatrix (may be NULL ). |
params | Parameters for the computation. |
stats | Statistics for the computation (may be NULL ). |
timeLimit | Time limit to impose. |
CMR_ERROR CMRbalancedParamsInit | ( | CMR_BALANCED_PARAMS * | params | ) |
Initializes the default parameters for recognition of balanced matrices.
params | Pointer to parameters. |
CMR_ERROR CMRbalancedStatsInit | ( | CMR_BALANCED_STATS * | stats | ) |
Initializes all statistics for recognition algorithm for balanced matrices.
stats | Pointer to statistics. |
CMR_ERROR CMRbalancedStatsPrint | ( | FILE * | stream, |
CMR_BALANCED_STATS * | stats, | ||
const char * | prefix | ||
) |
Prints statistics for recognition algorithm for balanced 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 CMRbalancedTest | ( | CMR * | cmr, |
CMR_CHRMAT * | matrix, | ||
bool * | pisBalanced, | ||
CMR_SUBMAT ** | psubmatrix, | ||
CMR_BALANCED_PARAMS * | params, | ||
CMR_BALANCED_STATS * | stats, | ||
double | timeLimit | ||
) |
Tests a matrix \( M \) for being balanced.
Tests if matrix \( M \) is balanced and sets *pisBalanced
accordingly. Automatically decides which algorithm to use.
If \( M \) is not balanced and psubmatrix
!= NULL
, then *psubmatrix
will indicate a submatrix of \( M \) with exactly two nonzeros in each row and in each column and with determinant \( -2 \) or \( 2 \).
cmr | CMR environment |
matrix | Matrix \( M \). |
pisBalanced | Pointer for storing whether \( M \) is balanced. |
psubmatrix | Pointer for storing a minimal nonbalanced submatrix (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. |
int compareBlockComponents | ( | const void * | a, |
const void * | b | ||
) |
Compares two matrix blocks according to minimum of number of rows and number of columns.