|
template<typename MatroidType , typename MatrixType > |
void | find_column_witnesses (MatroidType &matroid, MatrixType &matrix, size_pair_t split, matroid_element_set &extra_elements) |
|
template<typename MatroidType , typename MatrixType > |
void | find_row_witnesses (MatroidType &matroid, MatrixType &matrix, size_pair_t split, matroid_element_set &extra_elements) |
|
template<typename MatroidType , typename MatrixType > |
separation | find_witnesses (MatroidType &matroid, MatrixType &matrix, size_pair_t split, matroid_element_set &extra_elements) |
|
template<typename MatroidType , typename MatrixType > |
void | pivot_top_right (MatroidType &matroid, MatrixType &matrix, size_pair_t &split, matroid_element_set &extra_elements) |
|
template<typename MatroidType , typename MatrixType > |
void | pivot_bottom_left (MatroidType &matroid, MatrixType &matrix, size_pair_t &split, matroid_element_set &extra_elements) |
|
template<typename MatroidType , typename MatrixType > |
void | normalize_3_4_separation (MatroidType &matroid, MatrixType &matrix, size_pair_t &split, rank_distribution ranks, matroid_element_set &extra_elements) |
|
template<typename MatroidType , typename MatrixType > |
bool | extend_to_3_4_separation (MatroidType &matroid, MatrixType &matrix, matrix_permuted< const integer_matrix > &worker_matrix, size_pair_t top_left_size, size_pair_t bottom_right_size, separation &separation, matroid_element_set &extra_elements) |
|
template<typename MappingValue > |
size_pair_t | apply_mapping (permutation &permutation, std::vector< MappingValue > &mapping) |
|
template<typename NestedMinorSequence > |
size_t | find_first_7_element_minor (const NestedMinorSequence &nested_minors, size_pair_t &minor_size) |
|
template<typename MatroidType , typename MatrixType , typename MappingValue > |
bool | enumerate_extension (MatroidType &matroid, MatrixType &matrix, matrix_permuted< const integer_matrix > &worker_matrix, std::vector< MappingValue > &row_mapping, std::vector< MappingValue > &column_mapping, size_pair_t minor_size, size_t ext_height, size_t ext_width, separation &separation, matroid_element_set &extra_elements, unsigned long long &enumeration, unsigned long long &next_enumeration, unsigned long long max_enumerations, unsigned int &next_percent, logger &log, size_t cut) |
|
template<typename MatrixType , typename VectorType > |
void | copy_partial_row (const MatrixType &matrix, VectorType &vector, size_t row, size_t first_column, size_t beyond_column) |
|
template<typename MatrixType , typename VectorType > |
void | copy_partial_column (const MatrixType &matrix, VectorType &vector, size_t column, size_t first_row, size_t beyond_row) |
|
matroid_element_set | find_smallest_irregular_minor (const decomposed_matroid *decomposition, bool collect_extra_elements=true) |
|
template<typename InputIterator , typename OutputIterator1 , typename OutputIterator2 > |
std::pair< OutputIterator1, OutputIterator2 > | split_elements (InputIterator first, InputIterator beyond, OutputIterator1 rows, OutputIterator2 columns) |
|
template<typename MatrixType > |
void | create_indirect_matroid (const MatrixType &input_matrix, const matroid_element_set &row_elements, const matroid_element_set &column_elements, integer_matroid &sub_matroid, submatrix_indices &sub_indices) |
|
template<typename MatroidType , typename MatrixType , typename MappingValue >
bool tu::detail::enumerate_extension |
( |
MatroidType & |
matroid, |
|
|
MatrixType & |
matrix, |
|
|
matrix_permuted< const integer_matrix > & |
worker_matrix, |
|
|
std::vector< MappingValue > & |
row_mapping, |
|
|
std::vector< MappingValue > & |
column_mapping, |
|
|
size_pair_t |
minor_size, |
|
|
size_t |
ext_height, |
|
|
size_t |
ext_width, |
|
|
separation & |
separation, |
|
|
matroid_element_set & |
extra_elements, |
|
|
unsigned long long & |
enumeration, |
|
|
unsigned long long & |
next_enumeration, |
|
|
unsigned long long |
max_enumerations, |
|
|
unsigned int & |
next_percent, |
|
|
logger & |
log, |
|
|
size_t |
cut |
|
) |
| |
|
inline |
Enumerates all necessary partitions for a fixed extension inside a sequence of nested minors. It works on a separate matrix with mapping vectors. Those contain either entries +1 and -1 to show to which part of the minor-separation a row or column belongs and a 0 to designate a row or column to be unspecified.
- Parameters
-
matroid | The given matroid |
matrix | Representation matrix for the given matroid |
worker_matrix | Matrix to work on with the right permutation |
row_mapping | Mapping vector for rows |
column_mapping | Mapping vector for columns |
minor_size | Size of the current minor in the sequence of nested minors |
ext_height | Height of the extension |
ext_width | Width of the extension |
separation | Separation to be returned |
extra_elements | Set of matroid-elements to be filled with pivot-elements |
enumeration | Iteration step in the whole enumeration. |
next_enumeration | Next enumeration |
max_enumerations | Total number of enumerations |
next_percent | Next percent value for a percent-jump |
log | Logger |
cut | Length of the line to cut off the progress-part |
- Returns
- true if and only if the partitioning algorithm was successful
Type and index of enumerated element in smaller minor
Set all mappings to 1 at first
Set minor enumerated to -1
Iterator over extension bits and set row/column mapping to -1 if the bit is set
Transform the mappings into row/column permutations.
template<typename MatroidType , typename MatrixType >
Finds paths in the top-left BFS graph between two bottom-left independet columns, shortens them and swaps rows and columns such that the columns and the connecting row are near the split point.
- Parameters
-
matroid | Given matroid |
matrix | A representation matrix for the matroid |
split | Split of a given (3|4)-separation. |
Set up matrix for BFS
Try to find path from type 1 to the 2 and 3. If no path is found, try between 2 and 3.
Find reached node
Find reached node
We now have a path between two columns of different type and apply the path shortening technique to make it short.
Swap everything to be near split point.
template<typename MatroidType , typename MatrixType >
Finds paths in the bottom-right BFS graph between two bottom-left independet rows, shortens them and swaps rows and columns such that the rows and the connecting column are near the split point.
- Parameters
-
matroid | Given matroid |
matrix | A representation matrix for the matroid |
split | Split of a given (3|4)-separation. |
Set up matrix for BFS
Try to find path from type 1 to the 2 and 3. If no path is found, try between 2 and 3.
Find reached node
Find reached node
We now have a path between two columns of different type and apply the path shortening technique to make it short.